首页 > 解决方案 > 仅在浏览器支持的情况下如何发送 SameSite

问题描述

在我的网站中,我有一个集成,它将用户重定向到第三方网站,然后通过向我的服务器提交 POST 请求的表单将他们重定向回来。在 chrome 中,这会导致用户被注销,因为它拒绝发送 cookie。我通过将 cookie 添加SameSite=none到我的会话 cookie 中解决了这个问题。然而,这导致使用旧设备/浏览器的用户无法访问我的网站,因为设备将拒绝在初始请求时设置会话 cookie,因为它显然不知道是什么SameSite

我添加它的方式:

session_set_cookie_params(0, '/; SameSite=None', SITE_URL, true, true);

想一想,如果浏览器不支持,SameSite那么它会在上面描述的事件中传递会话cookie,所以没有必要设置它。

目前我只检查浏览器是否是 chrome 版本 80 或更高版本,但这只是一个修补程序,很快其他浏览器也可能会实施它,这不是一个可行的解决方案。

preg_match('/Chrome\/(\d+)/', $_SERVER['HTTP_USER_AGENT'] ?? '', $match);

$path = '/';

if (!empty($match[1]) && $match[1] > 79) {
  $path .= '; SameSite=None';
}

session_set_cookie_params(0, $path, SITE_DOMAIN, true, true);

有什么方法可以测试SameSite浏览器中的支持,并可能将其作为某种升级请求发送到我的服务器,然后它将重新发出带有SameSite设置的会话 cookie?

标签: phphttpsessioncookiessamesite

解决方案


推荐阅读