1。对于 PHP >= v7.3
您可以使用$options数组来设置samesite的值,例如:
setcookie($name, $value, [
'expires' => time() + 86400,
'path' => '/',
'domain' => 'domain.com',
'secure' => true,
'httponly' => true,
'samesite' => 'None',
]);
samesite 元素的值应该是None、Lax 或Strict。
在manual page 中了解更多信息。
2。对于 PHP
您可以根据您的代码库/需求使用以下解决方案/解决方法之一
2.1 使用 Apache 配置设置 SameSite cookie
您可以将以下行添加到您的 Apache 配置中
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
这将使用SameSite=Lax 标志更新您的所有cookie
在此处查看更多信息:https://blog.giantgeek.com/?p=1872
2.2 使用 Nginx 配置设置 SameSite cookie
location / {
# your usual config ...
# hack, set all cookies to secure, httponly and samesite (strict or lax)
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
这里也一样,这也会用SameSite=Lax 标志更新你的所有cookie
在此处查看更多信息:https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy
2.3 使用header方法设置SameSite cookie
众所周知,cookie 只是 HTTP 请求中的一个标头,具有以下结构
Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
所以我们可以使用 header 方法设置 cookie
header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");
事实上,Symfony 并没有等待 PHP 7.3,而是已经在后台做了,see here
?你也可以在 Laravel 中使用它,因为 Laravel 在底层使用 Symfony 的 Symfony\Component\HttpFoundation\Cookie 类
2.4 使用 setcookie 方法中的错误设置 SameSite cookie
setcookie('cookie-name', '1', 0, '/; samesite=strict');
小心这个,这是 PHP setcookie 方法中的一个已知错误,已经在 PHP7.3 版本中解决,请参见此处 - https://github.com/php/php-src/commit/5cb825df7251aeb28b297f071c35b227a3949f01