帐号重复登录处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帐号重复登录处理相关的知识,希望对你有一定的参考价值。


       前面说了"一个帐号多设备登录的处理"这里说说另一种情况,在不允许重复登录的要求下,

如何处理用户帐号重复登录后台服务? 这个看起来简单的问题,可很是纠缠了我一段时间。 



 一.选择哪种处理方法。

 首先,有两种可选择的方法:


   

方法一. 如果用户已登录,则后续的登录请求都拒绝掉,并断掉新连接。

     好处:


   

它能防止恶意发登录连接请求,同时,如用户访问处理是通过HASH来路由的话,


     可以在连接层就挡掉重复连接了。


     碰到的问题:


       1.在技术层面,TCP有时并不可靠,收不到连接断开的消息。这时有可能用户连接已经断开了。


       但服务端仍认为它在线,要一直等到超过心跳周期才断开。这期间客户端一直连接不上。


       2.在业务层面,存在用户之前登录过的设备不在身边,然后用新设备用户密码都对,但老登录不上去。 


       用户体验不好。



 

 方法二. 如果用户已登录,当有新登录请求时,如效验通过,则给已有连接发一条断开消息,然后断开这个连接。
      使用新的登录连接成为用户最新连接。

       这个方法的问题是,加重了服务端的处理任务,每一个新请求都要移到后面服务中处理一遍。


 我最后选的是方法二的方案。



 二. 那如何断开连接?

   这个地方有坑。    


    1. 发出因重复登录断开连接的提醒消息给被T设备时,可能因为业务关系,这个客户端前面已经排了一堆消息了。


    然后这个客户端慢慢的接收了一堆消息后,接到通知,你要被T了,然后就被T了....... 这期间,它还可能还在


    不停的发消息。


    2. 连接已被断开,但可能有些异步消息处理才刚处理完。这时,要合理的处理这种响应消息。可以丢弃一些,另一


    些可以转给新连接。



   怎么搞? 第二点可能没办法,但第一点可想点法子.


   

简单粗暴点,不给客户端发啥消息了,直接断开。但记录下这个被T的设备的标识。当后面这个设备再发重连

   消息过来时,如果记录到这个被T过了,这时再发个重复登录断开连接通知,让它知道不要再重连了,然后再断开它的连接。


好像目前暂时只碰到这些问题。



以上是关于帐号重复登录处理的主要内容,如果未能解决你的问题,请参考以下文章

struts2 重复登录问题 例如a用户用a帐号登录后 b用户用a帐号登录就把a那里下了 b可以用

一个帐号多设备登录的处理

java登录密码效验

Element-ui的使用(二):Form表单(基本效验)

处理 SSAS 多维数据集时发生异常 [重复]

Springboot使用validator进行参数校验