根据https://php.watch/articles/PHP-Samesite-cookies处的文章和https://www.php.net/manual/en/session.security.ini.php处的PHP文档资料,此新功能只有2种可能的配置选项,已在PHP 7.3中添加:
但是,根据Chrome控制台,需要将其设置为“无”:
设置了与URL上的跨站点资源关联的cookie,但未设置
SameSite
属性。它已被阻止,因为Chrome现在仅在跨站点请求中将Cookie设置为SameSite=None
和Secure
时才发送。您可以在Application> Storage> Cookies下的开发人员工具中查看Cookie,并在URL和URL上查看更多详细信息。
因此,我无法再设置跨站点Cookie。解决方法是什么?
答案 0 :(得分:1)
您可以使用ini_set
将值设置为“无”。使用该函数时,不检查是否支持该值:
ini_set('session.cookie_samesite', 'None');
session_start();
session_set_cookie_params
也可以进行设置:
session_set_cookie_params(['samesite' => 'None']);
session_start();
php.ini支持的此错误报告为here。
答案 1 :(得分:1)
答案 2 :(得分:1)
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 enter image description here
php 7.2 samesite在phpinfo中不存在 enter image description here
$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();
موفقباشید
答案 3 :(得分:0)
此方法对您很有帮助
在nginx
+ Secure
下方的SameSite=None
上添加标头的属性
位置/ {
proxy_cookie_path /“ /;安全; SameSite = none”;
}
对我有用!
答案 4 :(得分:0)
我正在使用cakephp 1.3。我需要不是同一域的前端后端cookie。 在这里详细检查。
答案 5 :(得分:0)
对于PHP 5.6.40,存在不涉及重建PHP的变通办法(关于path参数的修改)。
如果重建PHP二进制文件没有问题,我设法将此功能从PHP 7.3移植到PHP 5.6.40,现在有一个拉取请求。 对于尚未迁移的项目,我需要它。 我知道5.6分支已弃用,我只是在共享。
拉取请求: https://github.com/php/php-src/pull/6446
我们的回购包含以下更改: https://github.com/Inducido/php-src/tree/PHP-5.6.40
在Debian 8.11上进行了构建测试
会话: 。为setcookie()增加了对SameSite cookie伪指令的支持, setrawcookie()和session_set_cookie_params()。 从PHP 7.x分支移植 它们的末尾都有一个“ samesite” additional参数(字符串)
原型:
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)
none
就像ini文件中的false
。这解决了Chrome中的“此Set-Cookie由于用户首选项而被阻止”的问题。