谷歌浏览器80版本在2020年初预设了新的cookie策略
- 在这个策略下跨域访问将禁止储存操作Cookie,完全禁止跨站点使用Cookie。
- 这个策略导致在本地开发时请求后端开发服务器的接口无法储存设置Cookie,请求登陆接口后无法设置Cookie,之后需要登陆的接口由于未设置Cookie也就无法识别到用户是否已登陆,所有需要登陆后使用的接口也会被后端认为用户未登陆。
如何解决这个问题
- 在后端设置用户登陆Cookie时加上SameSite属性,它的值分别是
- Strict:只有在访问最初设置的域时,才可访问具有此设置的 Cookie。换言之,Strict 会完全阻止跨站点使用 Cookie。这一选择最适合需要高安全性的应用程序,如银行。
- Lax:Cookies with this setting are sent only on same-site requests or top-level navigation with non-idempotent HTTP requests, like HTTP GET . 因此,如果第三方可以使用Cookie,但增加了安全优势,保护用户免受CSRF攻击的侵害,则使用此选项。
- None:使用此设置的Cookie将像Cookies现在的工作方式一样工作。
- 在谷歌浏览器中关闭预设策略
- 如果线上版本的域名与请求地址一致,没有跨域。那么我建议是不要去在代码中设置,因为竟然有更加安全的防护那么我们为什么不去用呢,白嫖它不快乐吗。那么由于开发的时候才会跨域我们在开发的电脑上把谷歌浏览器的预设关闭掉就可以了。
- 谷歌浏览器打开页面chrome://flags
- 然后禁用掉SameSite by default cookies 和 Cookies without SameSite must be secure这两个设置
!