新版本的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