多端登錄如何實(shí)現(xiàn)踢人下線需求實(shí)現(xiàn)
1:項(xiàng)目背景
一個(gè)項(xiàng)目往往會(huì)有小程序,APP,PC等多端訪問(wèn),比如淘寶,京東等。這時(shí)候就會(huì)有一些踢人下線的需求,比如你在一臺(tái)電腦登錄了PC端,這時(shí)候你再另外一臺(tái)電腦也登錄PC端,這時(shí)候之前在另外一臺(tái)電腦上就會(huì)被強(qiáng)制下線。
或者你登錄了PC端,這時(shí)候你登陸了APP或者小程序,這時(shí)候PC端的賬號(hào)也會(huì)被強(qiáng)制下線
2:項(xiàng)目只有PC端
假設(shè)我們現(xiàn)在的項(xiàng)目只有PC端,沒(méi)有小程序或者APP,那么這時(shí)候就是很簡(jiǎn)單了,用戶的sessin(也就是所謂的Token)一般都是存儲(chǔ)在redis中,session中包括用戶ID等一些信息,當(dāng)然還有一個(gè)最重要的就是登錄的ip地址。
1:用戶在登錄的時(shí)候,從redis中獲取用戶session,如果沒(méi)有就可以直接登錄了
2:用戶在另外一臺(tái)電腦登錄,從redis中獲取到用戶session,這時(shí)候用戶session是有的,說(shuō)明用戶之前已經(jīng)登錄過(guò)了
3:這時(shí)候從用戶session中獲取IP,判斷二者的ip是不是相同,如果不同,這時(shí)候就要發(fā)送一個(gè)通知給客戶端,讓另外一臺(tái)設(shè)備登錄的賬號(hào)強(qiáng)制下線即可
3:項(xiàng)目有PC端和APP端和小程序端
當(dāng)你的應(yīng)用有PC端和APP端的時(shí)候,我們用戶的session如果還是只存一個(gè)ip地址,那明顯就是不夠的,因?yàn)楹芏嗲闆r下,我們PC端和APP端是可以同時(shí)登錄的,比如淘寶,京東等都是,也就是所謂的雙端登錄
這時(shí)候就會(huì)有多種情況
單端登錄:PC端,APP端,小程序只能有一端登錄
雙端登錄:允許其中二個(gè)端登錄
三端登錄:三個(gè)端都可以同時(shí)登錄
對(duì)于三端可以同時(shí)登錄就很簡(jiǎn)單,但是現(xiàn)在有個(gè)限制,就是app端只能登錄一次,不能同時(shí)登錄,也就是我一個(gè)手機(jī)登錄了APP,另外一個(gè)手機(jī)登錄的話,之前登錄的APP端就要強(qiáng)制下線
所以我們的用戶session存儲(chǔ)的格式如下
{ userId:用戶的id clientType:PC端,小程序端,APP端 imei:就是設(shè)備的唯一編號(hào)(對(duì)于PC端這個(gè)值就是ip地址,其余的就是手機(jī)設(shè)備的一個(gè)唯一編號(hào)) }
單端登錄
首先我們要知道,用戶登錄不同的設(shè)備那么用戶session是不一樣的。對(duì)于單端登錄,那么我們可以拿到用戶的所有的session,然后根據(jù)clientType和imei號(hào)來(lái)強(qiáng)制將其它端的用戶session刪除掉,然后通知客戶端強(qiáng)制下線
雙端登錄
同樣拿到所有用戶的session,然后根據(jù)自己的業(yè)務(wù)需求來(lái)判定哪一端需要強(qiáng)制下線,比如我們現(xiàn)在已經(jīng)登錄了PC端和APP端,這時(shí)候登錄小程序,現(xiàn)在要讓APP端的強(qiáng)制下線。
這時(shí)候登錄之后獲取用戶所有的session,這時(shí)候會(huì)有二個(gè)用戶session,首先拿到clientType = APP的session,然后來(lái)通知客戶端這個(gè)端需要強(qiáng)制下線。
如果這時(shí)候我登錄了PC端和一個(gè)APP端,這時(shí)候我用另外一臺(tái)手機(jī)登錄APP端,那么之前那臺(tái)手機(jī)上登錄的APP端就要被強(qiáng)制下線,這個(gè)時(shí)候僅通過(guò)clientType是不行的,因?yàn)槲叶€(gè)手機(jī)登錄的clientType都是APP端。所以這時(shí)候就要根據(jù)imei號(hào)來(lái)判斷了。因?yàn)椴煌氖謾C(jī)imei號(hào)是不一樣的。
這時(shí)候我拿到用戶所有的session
PC端的session sessionA{ userId: 1, clientType: PC, imei: "123" } APP端的session sessionA{ userId: 1, clientType: APP, imei: "12345" }
這時(shí)候我從另外一臺(tái)手機(jī)登錄的時(shí)候,生成的session應(yīng)該是這樣的
APP端的session sessionA{ userId: 1, clientType: APP, imei: "1234567" }
我發(fā)現(xiàn)同一個(gè)clientType的session已經(jīng)有了,這時(shí)候我要判斷imei號(hào)是否一樣,imei一樣說(shuō)明是同一臺(tái)設(shè)備,不同說(shuō)明不是同一臺(tái)設(shè)備,我們只需要把對(duì)應(yīng)設(shè)備的賬號(hào)強(qiáng)制下線即可了
總結(jié)
不管是單端登錄,雙端登錄還是多端登錄,我們都是根據(jù)用戶session來(lái)判斷。只要根據(jù)clientType和imei號(hào)來(lái)就可以滿足我們大部分的踢人下線需求了。
以上就是多端登錄如何實(shí)現(xiàn)踢人下線需求實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于多端登錄踢人下線的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決HTTP服務(wù)響應(yīng)數(shù)據(jù)不完整響應(yīng)數(shù)據(jù)截?cái)嗟膯?wèn)題
這篇文章主要介紹了HTTP服務(wù)響應(yīng)數(shù)據(jù)不完整響應(yīng)數(shù)據(jù)截?cái)嗟膯?wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03vscode使用restClient實(shí)現(xiàn)各種http請(qǐng)求的操作方法
這篇文章主要介紹了vscode使用restClient實(shí)現(xiàn)各種http請(qǐng)求的操作方法,定義變量以及使用環(huán)境變量和返回?cái)?shù)據(jù)作為變量的操作代碼,感興趣的朋友跟隨小編一起看看吧2024-02-0212種最常用的網(wǎng)頁(yè)編程語(yǔ)言簡(jiǎn)介(值得收藏)
隨著網(wǎng)站的越來(lái)越普及,與Web相關(guān)的開(kāi)發(fā)技術(shù)持續(xù)熱門,從開(kāi)始簡(jiǎn)單的html到復(fù)雜的web開(kāi)發(fā)語(yǔ)言asp、asp.net、php、jsp等等,在此,我就借助SEO馬龍博客的平臺(tái)跟大家簡(jiǎn)單的介紹一下常見(jiàn)的12種網(wǎng)頁(yè)編程語(yǔ)言2017-01-01git 配置多個(gè)SSH-Key實(shí)現(xiàn)示例
這篇文章主要為大家介紹了git 配置多個(gè)SSH-Key實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07關(guān)于base64編碼的原理及實(shí)現(xiàn)方法分享
我們的圖片大部分都是可以轉(zhuǎn)換成base64編碼的data:image。 這個(gè)在將canvas保存為img的時(shí)候尤其有用2012-03-03git-github 子模塊倉(cāng)庫(kù)更新(git submodule)及git中submodule子模塊
這篇文章主要介紹了git-github 子模塊倉(cāng)庫(kù)更新(git submodule)/git中submodule子模塊的添加、使用和刪除,使用子模塊后,不必負(fù)責(zé)子模塊的維護(hù),只需要在必要的時(shí)候同步更新子模塊即可,需要的朋友可以參考下2023-03-03