phpのheader関数を使ってexpires(クッキーの有効時間)付のcookieを発行する方法
2023.06.06
header関数を使ってcookieのexpiresを指定する際にはGMT日時を指定する必要があるので注意。(cookieそのものの仕様)。 expiresに適用する日時のフォーマットも少々独特なのでメモしておきます。
目次
1. ブラウザを閉じるまで有効なクッキーを発行
ブラウザを閉じるまで有効なものをブラウザセッションなどと言います。
ブラウザセッションのクッキーを発行するには、expires=0と指定します。
ブラウザを閉じると発行されたクッキーは無効(ブラウザにより自動消去されます)になります。
header( "Set-Cookie: hoge=fuga; expires=0; path=/; Secure; HttpOnly; SameSite=lax" );
2. 有効日時付きクッキーを発行
有効日時付のクッキーを発行するにはexpiresに有効期限のGMT日時を指定する必要があります。
下の例のようにexpiresにGMT日時を指定します。
header( "Set-Cookie: hoge=fuga; expires=Tue, 06 Jun 2023 01:16:15 GMT; path=/; Secure; HttpOnly; SameSite=lax" );
PHPコード的には下のようにGMT日時を発行すると楽です。
この例では、60秒後まで有効なクッキーを発行しています。(適宜60という数字を変えてください。)
※time()に足しこむ数値は秒数なので注意。1時間有効にしたければ、3600を足しこむ。
$expires = gmdate('D, d M Y H:i:s \G\M\T', time() + 60 );
header( "Set-Cookie: hoge=fuga; expires={$expires}; path=/; Secure; HttpOnly; SameSite=lax" );
これで1分間有効なcookieを発行できます。
発行から1分を経過すると無効になります。(ブラウザによって対象クッキーが自動削除される)
header関数を使わずともsetcookie関数を使うともっと楽にクッキーを発行することができますが、ちょっと古いphpだとクッキー属性にsamesiteを 属性を追加できなかったりするので、header関数からクッキーを発行する方法を知っておくと役に立つ場面があるかもしれません。