根据https://php.watch/articles/PHP-Samesite-cookies和https://www.php.net/manual/en/session.security.ini.php上的PHP文档,这个新功能只有2个可能的配置选项,在PHP 7.3中添加:
- session.cookie_samesite=Lax
- session.cookie_samesite=严格
然而,根据Chrome控制台,这需要设置为“无”:
与URL处的跨站点资源关联的cookie设置时没有SameSite
属性。它已被阻止,因为Chrome现在仅在跨站点请求设置为SameSite=None
和Secure
时才提供cookie。您可以在应用程序>存储> Cookie下的开发人员工具中查看Cookie,并在URL和URL中查看更多详细信息。
因此,我无法再设置跨站点cookie。解决方法是什么?
7条答案
按热度按时间idv4meu81#
您可以使用
ini_set
将该值设置为“None”。在使用该函数时,不检查该值是否受支持:session_set_cookie_params
也可以设置为:在php.ini中支持的bug报告是here。
正如@shrimpwagon在下面的评论中所说,
session.cookie_secure
必须是true
才能工作。PHP不需要它,但浏览器需要。lvmkulzt2#
ini_set('session.cookie_secure', "1"); ini_set('session.cookie_httponly', "1"); ini_set('session.cookie_samesite','None'); session_start();
php 7.4在phpinfo
中的相同站点
页面不存在页面不存在.
8ljdwjyq3#
不良:
正确:
说明here
wwtsj6pe4#
这种方法可以帮助我们
在
Secure
+SameSite=None
下面的nginx
上添加header的属性位置/ {
代理_cookie_path /“/; sameSite=none”;
}
它对我起作用了!
7jmck4yq5#
对于PHP 5.6.40,有一个解决方法(hack on path参数),它不涉及重新构建PHP。
如果您在重建PHP二进制文件时没有问题,我设法将此功能从PHP 7.3移植到PHP 5.6.40,现在有一个pull请求。我需要它来完成尚未迁移的项目。我知道5.6分支已经过时了,我只是分享一下。
拉取请求:https://github.com/php/php-src/pull/6446
我们的repo与更改:https://github.com/Inducido/php-src/tree/PHP-5.6.40
在Debian 8.11上测试
新增功能
Session:.为setcookie()、setrawcookie()和session_set_cookie_params()添加了对SameSite cookie指令的支持。从PHP 7.x分支的端口,它们都在最后有一个“samesite”附加参数(字符串)
原型:
INI文件处理的变化
none
的解释与ini文件中的false
类似。这解决了Chrome中“由于用户偏好设置,此设置Cookie被阻止”的问题。
vh0rcniy6#
如果您使用nginx,您也可以使用lua修改cookie。这是一个有点黑客,但我发现它是工作良好的遗留网站:
您可能需要调整正则表达式(gsub),但我发现它工作得很好。
6tqwzwtp7#
使命:让JS AJAX 请求从另一个域完成(例如:localhost)
步骤:
A.在 AJAX 请求中添加
withCredentials
B.在其余的
Access-Control-Allow-...
头中设置Access-Control-Allow-Credentials: true
C.将
"samesite" => "none"
添加到您的会话cookie参数。最后,我的代码看起来像这样:
服务器:
js -客户端:
在ubuntu上测试了FF 112和Chromium 113