cookie的samesite
问题
一个 http 页面 A 中有个 iframe 引入了 https 的页面 B。页面 A 和页面 B 均要读取 cookie 来判断用户是否登陆。
A 页面和 B 页面具有相同的二级域名
期望:A 页面登陆之后,B 页面也登陆
结果:A 页面登陆,部分用户 B 页面已登陆,部分用户 B 页面未登录
why
B 页面跳登陆页
发现 B 页面的请求未携带 cookie,尽管具有相同的二级域名。
协议不同导致跨站
部分用户 B 页面登陆,部分未登陆
上述已登陆的使用低版本谷歌浏览器,sameSite 默认为 none,即使跨站,cookie 也可以获取。
上述未登录的使用高版本浏览器,sameSite 默认为 Lax,跨站无法获取 cookie
how to solve
- 升级 A 页面为 https 协议
- 服务端 response header 设置
set-cookie
的时候,设置 SameSite 为 None,同时设置Secure
。且需要将后端服务域名必须使用 https 协议访问。 - A 和 B 部署在同一个二级域名下,协议也需要相同。
- 浏览器打开
chrome://flags/#same-site-by-default-cookies
手动将其暂时关闭 SameSite