4 回答
TA贡献1887条经验 获得超5个赞
您可以使用 将值设置为“无” 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 不需要它,但浏览器需要它。
TA贡献1802条经验 获得超10个赞
ini_set('session.cookie_secure', "1"); ini_set('session.cookie_httponly', "1"); ini_set('session.cookie_samesite','None'); session_start();
phpinfo 中的 php 7.4 相同站点
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();
TA贡献1834条经验 获得超8个赞
如果使用 nginx,也可以使用 lua 修改 cookie。这有点 hacky,但我发现它适用于遗留网站:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
# This is the relevant part:
header_filter_by_lua '
local cookies = ngx.header.set_cookie
if cookies then
if type(cookies) ~= "table" then
cookies = {cookies}
end
local gsub = string.gsub
local changed
for i, cookie in ipairs(cookies) do
local new_cookie = gsub(cookie, "^PHPSESSION=(.*)", "PHPSESSION=%1; Samesite=strict", 1)
if new_cookie ~= cookie then
cookies[i] = new_cookie
changed = true
end
end
if changed then
ngx.header.set_cookie = cookies
end
end
';
# End Lua
}
您可能需要调整正则表达式 (gsub),但我发现它运行良好。
- 4 回答
- 0 关注
- 426 浏览
添加回答
举报