判断用户非正常退出使用场景。比如:一个账号不能重复登录,这时就需要判断用户登录状态。

非正常退出情况:

    1.服务器端系统异常。
    2.会话超时。
    3.未退出的情况下,关闭浏览器。
    4.用户网络不稳定掉线。
    5.用户在登录的状态下,关机(掉电)了

通常的做法是 允许重复登陆,但是上一个会话就终止了(挤掉上一个用户)

用户登录给一个登录状态。或者将登录信息存到application中。或者redis缓存中。

正常退出

改变用户登录状态。或者清空用户登录信息。httpSession.removeAttribute("now_user");

会话超时

将用户信息保存到session 中。当这个session销毁时。改变用户登录信息。这里使用一个HttpSessionLister这个监听器。监听session的销毁。销毁时进行你所需得操作(改变用户登录状态信息)。

用户非正常退出

异常退出 方法 一(没试过)

就是前端写个定时器。定时向服务器发送请求。每次请求改变登录信息的时间。定时刷新这个时间。其他用户登录的时候看登录状态和刷新的这个时间。

 详细:解决办法是登录状态字段不仅存一个数字代表状态,还要存一个时间字段,用自定义分隔符隔开。然后需要在index,js中写一个定时器,定时向指定路由发送数据包,该路由执行的就是对数据库登录字段的写操作,定时刷新时间。当有其他用户登录已登录账户、上次异常退出账户及已超时退出账户、正常退出账户时,只需要对登录字段的状态和时间进行判断。获取当前时间与该时间做差,比较时间是否超过定时器的间隔时间的整数倍(1、2..),即可。

隐患问题是:在他人异常退出后,可能需要再次正常登录该账号需要一个时间差,不是可以立即登录,因为可能需要上文设置的等待时间间隔(最长等待时间为上文的时间间隔)。

异常退出 方法 二

当另有用户来访问的时候,就判断在application的数据,如果已经有该用户的访问记录,就按IP和时间来判断,是否可以继续。比如说IP不同,但时间隔了很久了,就允许访问

异常退出 方法 三

使用webscoket 定时与 服务器通信。与方法一差不多

异常退出 方法 四

过滤器里面每次过滤请求的时候将请求信息记录刷新此用户此ip的在线状态。其他用户登录的时候判断这个用户上一次发送请求的时间。时间过长就视为掉线。

相关文章:

  • 2021-09-11
  • 2021-12-18
  • 2022-12-23
  • 2021-12-28
  • 2021-08-25
  • 2021-12-23
  • 2021-12-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-21
  • 2021-07-26
  • 2021-05-25
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
相关资源
相似解决方案