chrome浏览器SameSite默认配置会影响set-cookie

263 阅读2分钟

这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

前言

在前边写过一篇文章跨域情况下的set-cookie:里边亲身实践说明在跨域情况下,如果前端设置了with-credentials,即使后端不设置跨域头也可以set-cookie成功。然而,最近产品反馈线上环境突然莫名出现了无法登录的问题。

我看了下是标记用户信息的sessionId没带过来,问了下后端最近也没动过代码,那怎么突然无法登录了??换了个浏览器,发现火狐和IE都可以正常登录,但是chrome就是不行。

问题排查

  • 首先判断是不是浏览器版本升级问题,问了下产品同学说最近没升级过浏览器。那是为啥呢??

  • 难道是chrome种cookie的策略变了,需要后端也设置跨域头才可以种上cookie。于是后端小哥哥去网关配置了CORS跨域头,但是cookie还是种不上。

  • 折磨了一天,各种查资料,一直没有找到解决问题的方法。晚上的时候后端小哥哥突然说是不是SameSite的缘故。我义正言辞的说不可能,SameSite只影响cookie能不能带过去,怎么会影响写入,不会的。小哥哥还是说改一下same-site试下。然后!!!!cookie种进去了。我??

最后我们又把网关上配置的跨域头去掉了,cookie仍然可以正常写入。说明,chrome浏览器无法写入cookie确实是因为SameSite的原因。

SameSite

MDN和网上其他资料在上介绍SameSite时,都只说了会影响请求时cookie能否带过去,并没有提到set-cookie。

我在网上看到chrome80后会默认将SameSite设置为SameSite=Lax(Lax允许部分第三方网站get请求发送cookie)。但是Lax这个配置是20年2月份,怎么会现在才影响我们的业务,无法解释。。。

最后在fetch的官方文档中看到下边几句话,将SameSite设置为Lax或者Strict时,跨域情况下是会影响response写入cookie的,但是官方说现在并没有开启啊!!

image.png

所以,到底是为啥??不知道有没有人遇到同样的问题。

虽然我内心不想承认是SameSite的原因,但是后端在设置cookie时加上SameSite=None;Secure;以后,chrome确实可以正常写入cookie了。