如何告诉PHP对跨站点cookie使用SameSite=None?
根据这篇文章和上的PHP文档,对于PHP7.3中添加的这一新功能,只有两种可能的配置选项:如何告诉PHP对跨站点cookie使用SameSite=None?,php,session,cookies,session-cookies,php-7.3,Php,Session,Cookies,Session Cookies,Php 7.3,根据这篇文章和上的PHP文档,对于PHP7.3中添加的这一新功能,只有两种可能的配置选项: session.cookie\u samesite=Lax session.cookie\u samesite=严格 然而,根据Chrome控制台,这需要设置为“无”: 与URL处的跨站点资源关联的cookie设置时没有SameSite属性。它已被阻止,因为Chrome现在只提供带有跨站点请求的cookie,如果它们设置为SameSite=None和Secure。您可以在“应用程序>存储>cookies”
SameSite
属性。它已被阻止,因为Chrome现在只提供带有跨站点请求的cookie,如果它们设置为SameSite=None
和Secure
。您可以在“应用程序>存储>cookies”下的“开发人员工具”中查看cookies,并在URL和URL中查看更多详细信息
因此,我无法再设置跨站点cookie。解决方法是什么?您可以使用将值设置为“无”。使用该函数时,不检查该值是否受支持:
ini_set('session.cookie_samesite', 'None');
session_start();
也可以设置它:
session_set_cookie_params(['samesite' => 'None']);
session_start();
php.ini中支持的错误报告是
如会话中所述,
cookie\u secure
必须为true
才能工作。PHP不需要它,但浏览器需要它。此方法对您的
在nginx
下面的Secure
+SameSite=None
地点/{
代理_cookie_path/“/;安全;SameSite=none”
}
这对我有好处 坏的:
session.cookie_samesite=None
正确:
session.cookie_samesite="None"
解释我正在使用cakephp 1.3。我需要后端cookie在前端,这不是同一个域。 请在此详细查看
ini\u集('session.cookie\u secure',“1”);ini_set('session.cookie_httponly',“1”);ini_set('session.cookie_samesite','None');会话_start()代码>
phpinfo中的PHP7.4 samesite
phpinfo中不存在PHP7.2 samesite
对于PHP5.6.40,存在一种解决方法(hack on path参数),它不涉及重建PHP
如果重建PHP二进制文件没有问题,我设法将此功能从PHP7.3移植到PHP5.6.40,现在有一个pull请求。
对于我们尚未迁移的项目,我需要它。
我知道5.6分支已被弃用,我只是在分享
拉取请求:
我们的回购协议及其变更:
在Debian 8.11上进行构建测试
新功能
会议:
. 添加了对setcookie()的SameSite cookie指令的支持,
setrawcookie()和session_set_cookie_params()。
来自PHP7.x分支的端口
它们的最末端都有一个“samesite”附加参数(字符串)
原型:
bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]])
bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]])
void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]])
(session_get_cookie_params updated too)
对INI文件处理的更改
- session.cookie_samesite
. 新的INI选项,允许为Cookie设置SameSite指令。默认值
设置为“”(空字符串),因此未设置SameSite指令。可以设置为“Lax”
或设置相应SameSite指令的“严格”或“无”。
使用“无”时,请确保包含引号,因为
None
会被解释
像ini文件中的false
这解决了Chrome中“此设置Cookie由于用户偏好而被阻止”的问题。谢谢-我能够使用以下代码删除Chrome消息并允许跨站点Cookie继续工作:会话设置Cookie参数(['samesite'=>'None','secure'=>true]);注意,旧浏览器不支持samesite=none,它将完全拒绝cookie。选中此项并确保在为会话cookie设置samesite属性时排除旧浏览器:php.ini中的setting session.cookie_samesite=None在PHP7.3.15中不起作用。如上所述使用session_set_cookie_参数确实有效。稍有错误。需要是:session\u set\u cookie\u参数(['SameSite'=>'None','Secure'=>true])代码>@shrimpragon updated不能这样做。某些浏览器存在错误,将完全拒绝SameSite=None的Cookie。您需要先嗅探UserAgent。您可以在这里使用php标题进行检查。
bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]])
bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]])
void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]])
(session_get_cookie_params updated too)