大家好,我是入错行的bug猫。(http://blog.csdn.net/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值

登录流程:

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

  2. 生成一个新token

  3. 根据用户id,在缓存B中,取用户信息:userInfo = getByUserId(userId)
       没有缓存:可喜可贺,用户第一次登录、或者用户又回来了。将User对象,转换成userInfo
       有缓存:有就有呗,可以肯定userInfo现在有值了…

  4. 判断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

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

退出登录:

  1. 根据用户id,在缓存B中,取用户信息:userInfo = getByUserId(userId)
  2. 从Map中根据终端类型,获取token,并且将该终端对应的值删除
  3. 根据token,删除缓存A中的数据
  4. 判断Map的大小:
       为0,根据用户id,删除缓存B中的数据
       不为0,什么也不做

大概流程就是这样。

其他细节, (ಡωಡ)

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

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

多终端登录,只保留一个移动端+PC端同时在线相关推荐

  1. 请编写fun()函数,函数的功能是删去一维数组中相同的数据在一起出现的数,相同的数只保留一个

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容13]请编写fun()函数,函数的功能是删去一维数组中相同 ...

  2. 【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个

    要求: 这是本人参加美团校招在线考试笔试题,如果此行为违反了美团校招笔试题商业保密性,请与本人联系. 思路:用一个while循环扫描整个字符串,用pStart字符指针指向整个字符串首地址,如果遇到首部 ...

  3. 在线多空行只保留一个工具

    在线多空行只保留一个工具 在线多空行只保留一个工具 多个空行只保留一个,工具会把2个及以上的空行替换成一个空行.多个空行只保留一个,工具会把2个及以上的空行替换成一个空行. https://toolt ...

  4. php删除数组中相同的元素,只保留一个相同元素

    <?php // 删除数组中相同元素,只保留一个相同元素 function formatArray($array) { sort($array); $tem = "; $temarra ...

  5. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 之间的随机整数(N \leq 100N≤100),对于其中重复的数字,只保留一个,把其余相

    自己用了非常朴素的方法将本题解了出来. 三个for循环和两个sort,哈哈哈,xswl. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 ...

  6. php 只需qq 获取用户信息,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

    //里客云资源站,likeyunba.com //BY TANKING // header header("Content-Type:application/json"); err ...

  7. C++ 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  8. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  9. Python程序——有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一个。

    **题目:**假设有一段英文文本,其中有重复的单词,要求去除重复单词,只保留一个,例如"This is is a desk.",程序输出为"This is a desk. ...

最新文章

  1. 聊一聊:请假不想说真实原因,你都怎么跟领导讲?
  2. oracle删除无效归档日志,求助:rman无法按照策略删除过期的归档日志
  3. 如何在RCP程序中添加一个banner栏
  4. ICCV2017 论文解读:基于图像检索的行人重识别 | PaperDaily #13
  5. 如何将rdd导入数据库中【简单实例】
  6. python集群到hadoop_如何使用Hadoop流在本地Hadoop集群中运行MRJob?
  7. python经典算法--------冒泡排序
  8. Go 语言学习总结(7)—— 大厂 Go 编程规范总结
  9. sql 占比计算_数据库索引的优化及SQL处理过程(建议收藏)
  10. 时间序列分析工具箱——tibbletime
  11. 阿里云云计算ACP学习(一)---弹性计算
  12. A survey of network-based intrusion detection data sets翻译二(5-8)
  13. 学习大数据开发零基础是不是限制,小白能否快速学会?附上学习路线图
  14. CSS的三种布局方式
  15. foxmail不能添加google账户
  16. 一台机子上运行多个mysql实例
  17. K均值聚类以及matlab实现
  18. 图书管理系统设计与实现—看这篇就够了
  19. python 爬取17k网址的个人书架内容
  20. Codeforces 1080E - Sonya and Matrix Beauty - Manacher

热门文章

  1. pytorch实现 vision_transformer
  2. 百度的AI技术定力终见真章
  3. WIN2003 R2安装EPSON6200L打印机问题解决
  4. QTableWidget 设置表头颜色
  5. 计算机毕业设计springboot基于疫情背景下的新型点餐送餐系统bpe1s源码+系统+程序+lw文档+部署
  6. 国家计算机2级考试模板,全国计算机二级考试《C++》笔试样卷
  7. SQL 中文首字母提取与自定义排序
  8. 一文看懂SMT车间生产环境要求及管理规范
  9. 周爱民 - 架构师能力模型
  10. [射影几何]射影线束画二次曲线