当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何判断用户是否登出?

端木高卓
2023-07-15

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

共有2个答案

满勇军
2023-07-15

你想在窗口关闭时拦截用户?那么如果用户使用右键在新标签中打开呢?是不是这些标签卡永远都不能关闭了?毕竟关闭了你就要用户登出,不然就不能关闭。
再比如说用户长时间不操作导致Token过期了呢?这个时候又需要用户登录了,那么这个登出日志应该怎么做?在用户请求接口发现Token过期之后自动在请求登出操作吗?

所以最终得看你实际的业务需求是怎么样的。如果仅仅是为了记录日志,那么用户自己手动登出肯定是可以处理的。但是并不需要一定是必须再前端做,也可以在后端做处理,如果用户没有手动登出,系统按照Token过期自动处理,比如说一个小时执行一次如果Token超时了就自动处理登出流程。

公孙黎昕
2023-07-15

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

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

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

 类似资料:
  • cmf_is_user_login() 功能 判断前台用户是否登录 参数 无 返回 boolean

  • X1.0新增 sp_is_user_login() 功能: 判断用户是否已经登录 参数: 无 返回: 类型布尔 true/false

  • cmf_is_user_login() 功能 判断前台用户是否登录 参数 无 返回 boolean

  • 问题内容: 我有一个AJAX请求,期望以JSON作为响应。 但是有可能返回的内容可能不是JSON,而是HTML错误页面(不幸的是,响应类型为200)。 如何确定响应是否为JSON? (如果有帮助,我正在使用jQuery。但是我不能使用任何插件。) 问题答案: 好吧,如果您使用的是jQuery并指定了对调用的属性,那么jQuery将尝试解析JSON,如果不是,则JSON应该调用回调。 编辑 对于不使

  • 本文向大家介绍js如何判断用户是否是用微信浏览器,包括了js如何判断用户是否是用微信浏览器的使用技巧和注意事项,需要的朋友参考一下 上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下载此 apk。然后就发生了问题,经过测试,发现用微信扫一扫打开的页面点击下载按钮下载不了 apk,后百度之,原来是微信内置浏览器

  • 前端如何判断用户的 mac 是 arm 还是 x86 https://www.telerik.com/download/fiddler-everywhere 下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm 怎么实现的?浏览器的 UA 都还是谎称自己是 intel 是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?