由于 chrome 安全策略调整,默认情况下禁止使用第三方 cookie ,导致本地开发环境 localhost:3000 访问 myserver.com 域下的服务无法携带 cookie,从而登录失败。
方法一
在 91 版本后又去掉了配置页中 SameSiteByDefaultCookies 选项,但我们可以仍通过命令行执行:
open -a "Google Chrome" --args --disable-features=SameSiteByDefaultCookies
🌴 注意:这里需要先退出 chrome,再执行命令,否则不会生效
方法二
但是我发现某些环境中,仍然会出现请求无法携带 cookie 导致登录失败的情况。这里还有一种方法:在控制台中手动设置 Secure 和 SameSite 属性
SameSite取值
- Strict:最为严格,完全禁止第三方Cookie,跨站点时,任何情况下都不会发送Cookie
- Lax:规则稍稍放宽,大多数情况也是不发送第三方 Cookie,除导航到目标网址的 Get 请求外。
- None:网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效
小结
禁止携带第三方 cookie 能够防止用户信息被滥用或跟踪,但是 chrome 频繁的更新变化给开发者带来了一些不便,上面的两种方法也只是暂时解决了问题,随着 chrome 后续的更新可能也将不再适用。