一次被Chrome“坑“了的奇怪登出bug解决

本文详细解析了一个在Chrome浏览器上出现的奇怪登出问题。该问题表现为应用在未执行任何登出操作的情况下自动登出。经过一系列排查,最终发现是由于Chrome浏览器在路由跳转时会取消尚未完成的请求所导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题发现

我在调试一个功能时,发现总会莫名其妙的退出,但是后台并没有打印任何主动登出的日志。于是我问前端的同事是怎么回事,结果前端的同事也说并没有主动执行任何登出操作。
这个问题存活了一晚上+一上午。

解决过程

  1. 首先在后台注释了所有主动登出的代码,没有解决这个问题
  2. 更换浏览器,发现火狐和ie和edge浏览器,都没有此问题
  3. 我们发现更前版本(我们产品的版本)的也有此问题,但是没有人提出这个bug
  4. 在前端追踪代码发现是因为local storage被清空,导致进入index页面时获取不到已存储的用户token,从而登出。但是我们在所有会清空local storage的地方都加入了console.log(),都没有输出,从而我们认为并没有任何代码清空local storage
  5. 我们发现在判断语句为false时,依然能够进入if判断,但这个问题并没有解决当前这个问题
  6. 我们发现,local storage中存储的三条信息,只有两条被清空,另外一条没有任何清空的代码,而我们在多个地方的某种触发条件下,会清空另外两条信息。但是鉴于console.log()无效,我们使用alert()
  7. 我们发现在一个异常处有一个alter弹出
    在这里插入图片描述
  8. 我们在alert的地方添加短点,发现所有的登出前的请求都被浏览器cancel掉了,没有发出去,从而导致代码捕捉到了这个异常,清空了local storage中的两条信息
  9. 于是在网上搜索此问题在这里插入图片描述
  10. 最终确定这是chrome浏览器的一个bug,以下是Stack Overflow上的解答在这里插入图片描述
    这段话的翻译是:我们发现了一个很相似的问题就是chrome会取消请求,当用frames或者iframes来加载东西时,这个现象好像跟计算机的网络连接速度有关系。
  • 结论
    • chrome会在页面路由跳转的时候,abort所有正在进行的request
    • 如果在abort线程触发之前,request成功结束,则成功跳转
    • 如果在abort线程触发之后,request还没结束,那么abort线程将会终结这个request
    • 由于后台添加了很多接口,访问量增大,接口的返回速度变慢,所以大部分情况会是,在abort线程触发之后,还没有完成跳转。
    • 同时并行线程的先后完成顺序不可控,所依点击home按钮返回index页面,会不规律并 且大部分情况下,直接登出

所以,要注意chrome的abort机制,和js在判断语句为false时,依然能够进入true逻辑的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值