新版本chrome浏览器带来的跨域请求cookie丢失问题
新版本的chrome浏览器(80版本之后)对cookie的校验更加严格,有页面嵌套的可能会出现问题。
chrome升级到80版本之后(最坑的地方:灰度测试,即也可能存在同一版本不同人的浏览器表现不同),cookie的SameSite属性默认值由None变为Lax,该问题的讨论可参考:https://github.com/google/google-api-javascript-client/issues/561
在Lax模式下,以下类型请求将受影响:
请求类型 |
示例 |
正常情况 |
Lax |
链接 |
<a href="..."></a> |
发送 Cookie |
发送 Cookie |
预加载 |
<link rel="prerender" href="..."/> |
发送 Cookie |
发送 Cookie |
GET 表单 |
<form method="GET" action="..."> |
发送 Cookie |
发送 Cookie |
POST 表单 |
<form method="POST" action="..."> |
发送 Cookie |
不发送 |
iframe |
<iframe src="..."></iframe> |
发送 Cookie |
不发送 |
AJAX |
$.get("...") |
发送 Cookie |
不发送 |
Image |
<img src="..."> |
发送 Cookie |
不发送 |
解决方法1:
下面的设置无效。
Set-Cookie: widget_session=abc123; SameSite=None
下面的设置有效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure
解决方法2:
两个跨域的网站部署到一起,例如
www.xxx.com/A网站
www.xxx.com/B网站
解决问题3:
谷歌浏览器里面:
chrome://flags/
把SameSite by default cookies这个参数设置成disabled