我也在为此进行“反复试验”,但 Google Chrome 实验室 GitHub 的这个答案对我有一点帮助。我将其定义到我的主文件中,并且它工作正常 - 很好,仅适用于一个第三方域。仍在进行测试,但我渴望用更好的解决方案更新这个答案:)
我现在使用 PHP 7.4,这种语法运行良好(2020 年 9 月):
$cookie_options = array(
'expires' => time() + 60*60*24*30,
'path' => '/',
'domain' => '.example.com', // leading dot for compatibility or use subdomain
'secure' => true, // or false
'httponly' => false, // or false
'samesite' => 'None' // None || Lax || Strict
);
setcookie('cors-cookie', 'my-site-cookie', $cookie_options);
如果你有PHP 7.2 或更低版本(正如罗伯特在下面的回答):
setcookie('key', 'value', time()+(7*24*3600), "/; SameSite=None; Secure");
如果您的主机已更新为PHP 7.3,你可以使用(感谢马恩的评论):
setcookie('cookieName', 'cookieValue', [
'expires' => time()+(7*24*3600,
'path' => '/',
'domain' => 'example.com',
'samesite' => 'None',
'secure' => true,
'httponly' => true
]);
您可以尝试检查 cookie 的另一件事是启用下面的标志,用他们自己的话说,“将为可能受此更改影响的每个 cookie 添加控制台警告消息”:
chrome://flags/#cookie-deprecation-messages
完整代码请参见:https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md,他们有代码same-site-cookies
too.