如何告诉 PHP 对跨站点 cookie 使用 SameSite=None?

新手上路,请多包涵

根据此处的文章 https://php.watch/articles/PHP-Samesite-cookies 和 PHP 文档 https://www.php.net/manual/en/session.security.ini.php ,只有 2此新功能的可能配置选项,在 PHP 7.3 中添加:

  1. session.cookie_samesite=宽松
  2. session.cookie_samesite=严格

然而,根据 Chrome 控制台,这需要设置为“无”:

在没有 SameSite 属性的情况下设置了与 URL 上的跨站点资源关联的 cookie。它已被阻止,因为 Chrome 现在仅在使用 SameSite=NoneSecure 设置时提供带有跨站点请求的 cookie。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在 URL 和 URL 查看更多详细信息。

因此,我无法再设置跨站 cookie。解决方法是什么?

原文由 Dane Iracleous 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

您可以使用 ini_set 将值设置为“无”。使用该函数时不检查该值是否受支持:

 ini_set('session.cookie_samesite', 'None');
session_start();

session_set_cookie_params 也可以设置:

 session_set_cookie_params(['samesite' => 'None']);
session_start();

php.ini 支持的错误报告在 这里


正如 @shrimpwagon下面的评论中 所说, session.cookie_secure 必须是 true 才能工作。 PHP 不需要它,但浏览器需要。

原文由 Anonymous 发布,翻译遵循 CC BY-SA 4.0 许可协议

ini_set('session.cookie_secure', "1"); ini_set('session.cookie_httponly', "1"); ini_set('session.cookie_samesite','None'); session_start();

phpinfo 中的 php 7.4 samesite在此处输入图像描述

phpinfo 中不存在 php 7.2 samesite在此处输入图像描述

 $currentCookieParams = session_get_cookie_params();
$cookie_domain= 'your domain';
if (PHP_VERSION_ID >= 70300) {
session_set_cookie_params([
    'lifetime' =>  $currentCookieParams["lifetime"],
    'path' => '/',
    'domain' => $cookie_domain,
    'secure' => "1",
    'httponly' => "1",
    'samesite' => 'None',
]);
} else {
session_set_cookie_params(
    $currentCookieParams["lifetime"],
    '/; samesite=None',
    $cookie_domain,
    "1",
    "1"
);
}
session_start();

原文由 Farhad Aghasaghloo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏