php - 仅在浏览器支持的情况下如何发送 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?
解决方案
推荐阅读
- windows - 有什么方法可以知道 DOS 应用程序是否使用图形模式?
- javascript - 使用javascript获取最后应用的宽度CSS规则
- python - [Python]-无法通过使用 input() 函数为其赋值来确定变量类型,为什么?
- c# - 在导出到 xls 之前隐藏列值
- python-3.x - 用索引值替换布尔数据框中的所有 True
- python - 是否有与 Ada “然后”和“或其他”等价的 Python?(懒惰的评价)
- sql - 如何在具有多个条件的特定列中执行计算
- android - 如何将日期存储为 SharedPreference?
- python - 如何根据其他列的值在 Pandas 中包含移动平均线
- python - 如何解决在scrapy中忽略响应429