PHP7.2以前のsetcookie
関数にはSameSite
属性をつけるための引数がない!
header
関数で生のSet-Cookie
ヘッダを書くのも手ですが・・・
裏技として、Path属性用の引数を利用してSameSite
属性をつけることができます。
7.2以前の方法(裏技)
/* 関数のインターフェース
setcookie(
string $name,
string $value = "",
int $expires = 0,
string $path = "",
string $domain = "",
bool $secure = false,
bool $httponly = false
): bool
*/
# pathにわたす文字列内に`;`をいれることで、無理やりSameSite属性を指定する!!!
setcookie('cookie_name', 'cookie_value', 0, '/; SameSite=strict', '', true, true);
# 出力されるレスポンスヘッダ
# Set-Cookie: cookie_name=cookie_value; path=/; SameSite=strict; secure; HttpOnly
7.3以降の方法(正規)
# PHP 7.3.0 以降で使える代替のシグネチャ:
# setcookie(string $name, string $value = "", array $options = []): bool
setcookie('cookie_name', 'cookie_value', [
'expires' => 0,
'path' => '/',
'samesite' => 'strict',
'secure' => true,
'httponly' => true,
]);
# 出力されるレスポンスヘッダ
# Set-Cookie: cookie_name=cookie_value; path=/; secure; HttpOnly; SameSite=strict
逆に7.3以降でPath属性を使ってSameSite
をねじ込もうとすると以下のエラーになるので注意!!!
Uncaught ValueError: setcookie(): "path" option cannot contain ",", ";", " ", "\t", "\r", "\n", "\013", or "\014"