当有用户上线时,插入表中一条数据。用户下线时(或者判断用户离线时)将该条数据删除。web
若是用户已经登陆,提示“用户已经登陆”。分布式
成功登陆时写入表中数据。优化
用户主动退出系统,从表中删除用户userId对应的记录。加密
针对异常下线的状况,使用逻辑进行判断:若是用户半个小时内都没有操做,则判断用户已下线,将用户从在线用户表中删除。spa
使用token。用户登陆成功时,使用token存储用户登录时间(USER_LOGIN_TIME)、用户登陆类型(LOGIN_APP_TYPE)、登陆设备(LOGIN_DEVICE)、用户userID(USER_ID)等信息。blog
所谓的token,就是如下面这种格式token
admin&1,2,3&11,12,13&2018-10-10 10:00:00&web&1字符串
将这个字符串进行加密转码(可逆加密),最后获得的就是token。解密时使用String.split(“&”)获得List,按照以前的约定格式就能够得到各类信息。it
说白了,就是用户登陆成功后将用户登录时间(USER_LOGIN_TIME)、用户登陆类型(LOGIN_APP_TYPE)这些信息做为校验的token返回给用户,而后每次再让用户发送过来进行校验及解析数据。ast
在哪里解析呢?拦截器,本身定义一个拦截器,注册好,而后用来校验和解析token,获取用户登录时间(USER_LOGIN_TIME)、用户登陆类型(LOGIN_APP_TYPE)这些信息。
Map(Long userId,Date lastOperaTime)。
注册一个拦截器,每次请求都要根据用户userId更新用户最后操做时间。
项目比较小,也并不是分布式系统,采用的这种简单的方案。
如今用于项目中,还在观察效果。没有最好的方案,合适就好。会根据出现的问题进行修改和优化。