主项目为vue3+vite,最近应需求嵌入一个前后端未分离的老项目,采用了iframe直接打开,将token用户信息通过url的参数传递过去,但打开页面时发现,部分接口302重定向
可以看到,在set-cookie这里出现了一个叹号,内容为
当使用非chrome内核的浏览器打开时,一切又正常了!在查阅资料后,找到如下解释
chrome自版本80之后,出现了所谓同站策略问题。
即,在A页面请求B页面,如果chrome发现它们不是同一个站点的话,就不传cookie给B页面所在的服务器。原本cookie是会附在浏览器到服务器的每个请求(request)里的,仿佛这是理所应当,自然而然的,现在好了,chrome区分情况,不一定允许这么干了。
cookie是由服务器分配给浏览器的,相当于给了浏览器一个访问凭证。浏览器每次访问服务器的时候,都会带上这些个凭证。现在由于浏览器策略改变,嵌进去的页面与服务器交互的时候,无法带上cookie,服务器检索不到这个凭证,就每次都给页面分配一个新的cookie,前后对应不上,当然就登录不了了。
解决办法有两个可行策略:
- response的header设置Set-Cookie:SameSite=None。
- Nginx做代理转发,这样就不存在不同域的问题了。