Joh*_*ree 10 php cookies session samesite
我希望有人能给我一些关于我的问题的想法。我正在尝试应用 SameSite cookie 来使会话工作,但它似乎不起作用。访问的网站html:
<iframe src="https://www.example.com/test/iframe.php"></iframe>
Run Code Online (Sandbox Code Playgroud)
iframe 源站点:
<?php
header('Set-Cookie: cross-site-cookie=PHPSESSID; SameSite=None; Secure');
session_start();
if(!isset($_SESSION['test'])){
echo 1;
$_SESSION['test'] = 'ee2';
}else{
echo $_SESSION['test'];
}
Run Code Online (Sandbox Code Playgroud)
如果我访问该网站,我仍然会A cookie associated with a cross-site resource at https://www.example.com/ was set without the SameSite attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with SameSite=None and Secure.
在浏览器控制台中收到消息并且会话未保存。
我错过了什么吗?如果设置了跨站点 cookie,为什么我会在控制台中收到此消息,会话不工作的原因可能是什么?我正在使用 php 7.1.33。如果我直接打开 iframe,它可以正常工作,并且如果我使用浏览器打开站点,但在默认情况下没有启用 SameSite cookie 标志进行测试,它也可以正常工作。
Beh*_*iry 11
我通过编辑 .htaccess 解决了它
<ifmodule mod_headers.c>
Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
</ifmodule>
Run Code Online (Sandbox Code Playgroud)
设置会话和 cookie 参数 php:https : //www.php.net/manual/en/function.session-set-cookie-params.php 浏览器:https : //developer.mozilla.org/en-US/docs/ Web/HTTP/Headers/Set-Cookie/SameSite
<?php
session_set_cookie_params(["SameSite" => "Strict"]); //none, lax, strict
session_set_cookie_params(["Secure" => "true"]); //false, true
session_set_cookie_params(["HttpOnly" => "true"]); //false, true
session_start(); //everything before this
Run Code Online (Sandbox Code Playgroud)
或 php.ini:
[Session]
session.cookie_samesite = "Strict"
session.cookie_secure = 1
session.cookie_httponly = 1
Run Code Online (Sandbox Code Playgroud)
我使用 htaccess 临时解决了我的问题:
Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
Run Code Online (Sandbox Code Playgroud)