日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/3/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多终端登录,只保留一个移动端+PC端同时在线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是入錯行的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值



登錄流程:

  • 假設用戶在登錄,已經通過賬號密碼的驗證,并且從數據中取到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免登陸等,各自根據具體業務實現就好~





    本次博文寫得真愉快,以后也像這樣偷懶吧 (?ω?)噗





    總結

    以上是生活随笔為你收集整理的多终端登录,只保留一个移动端+PC端同时在线的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。