iframe嵌套的页面无法显示_Chrome 80.0后的版本,有些系统无法访问了,怎么回事?...

     最近有个项目突然在使用过程中发现,在chrome浏览器下显示拒绝连接,而其他浏览器显示正常。查看请求发现,浏览器访问系统的时候没有将登录成功设置的cookie传递到后端,导致系统登录失败,系统自动跳转到登录页面,页面无法显示。

     查询资料发现,chrome新版本对于iframe嵌入系统的情况,不在发送嵌入系统的cookie。而该项目正是使用的iframe嵌套另外的系统。

这个问题中涉及到一个知识  SameSite cookies

43d8c0f65caf33ce349377bc1dbd8cbf.png

b8a8ddae6405a3d3e3ed7492e4c73f68.png

参考资料:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie/SameSite

而chrome 80 将该值默认设置为了Lax。使用iframe的时候不会带第三方cookie.

如果你的项目中有如下跨域场景:

  1. 跨域的 ajax 请求;

  2. 跨域嵌入的 iframe;

  3. 跨域的图片资源请求;

  4. 跨域的 POST FORM 表单;

这些场景下chrome将不会携带cookie,可能您就需要注意解决了。

解决方案

一、 在对需要跨域发送的 cookie 进行 set-cookie 的时候,显式声明  SameSite:None; Secure  属性,如:
set-cookie: key1=value1; Path=/; Secure; SameSite=None

需要后端接口使用https

二、修改浏览器配置
chrome://flags/#same-site-by-default-cookies

4fa4d1b960f49b7b5cc9977e191543c0.png

   将其设置为Disable

三、修改后端代码,不使用基于cookie的认证,采用基于token的认证。这种方案可能对已有代码修改比较大,需要在每个请求后都增加token。当然如果前端代码封装得好,可以统一添加,就比较方便。如果有防CSRF攻击,那可能都不需要修改。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值