如何判断用户是否登出?

作者站长头像
站长
· 阅读数 7

系统的日志需要登录和登出闭环,即有一个用户登录日志,就需要有一条登出日志。如果用户通过登出按钮手动登出,触发登出接口是没问题的。但是大多数用户,包括我自己都是直接点击x,关闭系统。于是我监听了beforeunload事件,想在这里发登出请求。现在遇到两个问题,一是:刷新也会触发这个事件。二是:触发这个事件后的弹窗如何判断用户是否登出?如何判断用户是否登出?重新加载是刷新弹出的,离开时关闭弹出的,我只想在点击离开的时候触发登出,重新加载和取消不触发该怎么办?我看了mdn关于这个事件的描述,好像这个事件没办法区分关闭和刷新,而且离开和取消也没有回调。唯一能做的就是阻止离开。是不是思路错了,有其他办法可以实现吗?比如说后端?

回复
1个回答
avatar
test
2024-06-30

我觉得,要么设计有问题,要么你理解有问题。从浏览器的角度来考虑:

  1. 用户即使不登出,cookie、token 也会过期,到时候也需要再次登录,所以不可能一一对应
  2. 用户离开页面,并不会让 cookie、token 都过期,如果关闭的间隔补偿,再次返回还能继续使用
  3. beforeunload 的设计动机是避免丢失用户的操作,用在这里也不合适。
  4. 还有多 tab 的状态管理,也跟你们的要求是冲突的。

我建议从头梳理一下你们的需求、目标和可接受的范围,然后设计技术方案去满足。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容