blog
blog copied to clipboard
Chrome 80 默认禁用第三方cookie(SameSite=Lax)
Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。
Chrome 80 默认禁用第三方 Cookie,也就是说,会默认会给第三方 Cookie 添加 SameSite=Lax
属性,也就是说,A 域名跨域请求 B 域名的时候,Cookie 不会带过去,这会导致以下几种情况
- jsonp 请求跨域,无法通过携带 Cookie
- CORS 请求,原有开启 withCredentials 无法携带 Cookie
- iframe 嵌入场景,内嵌页面无法发送 Cookie
Chrome 中打开 chrome://flags/#same-site-by-default-cookies
和 chrome://flags/#cookies-without-same-site-must-be-secure
两个 Flag,就能提前试验屏蔽第三方 Cookie 的效果
解决
Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
下面的设置无效:
Set-Cookie: widget_session=abc123; SameSite=None
下面的设置有效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure