1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 多终端登录 只保留一个移动端+PC端同时

多终端登录 只保留一个移动端+PC端同时

时间:2021-10-30 00:26:21

相关推荐

多终端登录 只保留一个移动端+PC端同时

大家好,我是入错行的bug猫。(/qq_41399429,谢绝转载)

今天突然有小伙伴在群里问bug猫,多终端登录怎么搞。

bug猫说,不知道百度的程序猿不是好码农!

后来bug猫自己百度一下发现,还真没有!

于是就有这篇博文了~

今天就不罗嗦,毕竟快要下班放假了

多终端登录,只保留一个移动端+PC端同时在线。类似于微信、QQ,一个账号只能是一台电脑、或者一部手机同时在线,但是电脑和手机却可以同时在线。

既然有移动端,那么后台服务系统,存放用户信息的,肯定是用缓存。使用token、或者sessionId东西,在缓存中取用户信息。

为了统一,假设就叫token吧!

设计思路:

用户在登录的时候,需要传入登录端类型:移动端;PC端;用户信息,在缓存中分为两个部分存储: 根据token,获取到用户id,称为缓存A----> token:userId根据用户id,获取到用户信息,称为缓存B----> userId:userInfo 用户信息对象userInfo,里面必须要有一个Map,map键为终端类型,值为终端类型对应的token。终端类型:token值

登录流程:

假设用户在登录,已经通过账号密码的验证,并且从数据中取到User对象

生成一个新token

根据用户id,在缓存B中,取用户信息:userInfo = getByUserId(userId)

没有缓存:可喜可贺,用户第一次登录、或者用户又回来了。将User对象,转换成userInfo

有缓存:有就有呗,可以肯定userInfo现在有值了…

判断userInfo对象中的Map,能否根据终端类型,获取到值:

有值:说明用户这个终端,之前登录过,旧token还有效;

a. 根据旧token,删除缓存A中的数据:delByToken(token)

b. 将新token存入到Map中

c. 在缓存A中存入数据

d. 重新将userInfo存入缓存B

无值:说明用户这个终端,没有登录、或者token失效:

a. 将新token存入到Map中

b. 在缓存A中存入数据

c. 重新将userInfo存入缓存B

再将新token赋值给userInfo,返回给前端。注意Map不要序列化也返回了!

退出登录:

根据用户id,在缓存B中,取用户信息:userInfo = getByUserId(userId)从Map中根据终端类型,获取token,并且将该终端对应的值删除根据token,删除缓存A中的数据判断Map的大小:

为0,根据用户id,删除缓存B中的数据

不为0,什么也不做

大概流程就是这样。

其他细节,(ಡωಡ)

里面还涉及到,移动端token失效时长、移动端有token免登陆等,各自根据具体业务实现就好~

本次博文写得真愉快,以后也像这样偷懒吧 (ಡωಡ)噗

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。