谷歌浏览器80+版本SameSite属性默认值调整带来的影响

248 阅读2分钟

前言

最近本地调试忽然登录不上系统,一开始以为是后端服务器发版,询问后端同事说并没有,然后他帮我找原因,发现是没有cookie,我:???我没改过登录这块的东西呀,然后又发现开发环境和测试环境是可以的,在想是不是跨域的问题,然后发现跨域的相关属性我们也是设置允许跨域的,那就是本地没有cookie,谷歌一番,哦,原来是谷歌浏览器版本问题。

发现问题

前端首次请求服务端数据时,响应头里面有一个Set-Cookie属性,下次请求我们会将Set-Cookie中的值作为请求头中的Cookie的值传给服务端,调试发现本地请求时响应头的Set-Cookie属性值后面有一个黄色警示标识,,查询资料发现是谷歌浏览器80以上版本会将请求中的cookie中的SameSite属性由原来的None改为了Lax,导致post请求不会默认发送cookie,从而导致请求不通过,无法登录

解决问题

SameSite属性可以使跨站请求不发送cookie,防止跨站请求伪造攻击(CSRF),因此需要服务端添加属性SameSite=None,同时这个属性为None值时必须要同时设置Secure属性,也就是标识其必须使用https协议,至此,问题解决。即:服务端添加SameSite=None,Secure,并且将协议改为https

本文只是我个人解决问题的一个回顾总结,可能还是邮没有理解透彻的地方,欢迎各位大佬指正,解决问题参考:冴羽大佬的掘金文章 juejin.cn/post/684490… 一些cookie相关内容写的非常透彻明白,手动点赞