需求
不同客戶端可以同時(shí)登錄 , 但同一客戶端 2個(gè)同樣帳號(hào)不允許登錄
就是說(shuō)同一個(gè) tid 同一帳號(hào)不允許同時(shí)登錄 , 不允許的意思就是第1人登錄后, 第2人再登錄, 第1人會(huì)被踢下來(lái),失效
實(shí)現(xiàn)
1 redis
因?yàn)閠oken的管理使用的是redis
在生成token 的同時(shí)再生成一個(gè)key key是: tid:userid 內(nèi)容: token
tid 為客戶端id 比如web端為1 安卓為2 pc 端為3 由各個(gè)客戶端傳給后臺(tái)
如果第二人登錄時(shí), 根據(jù)tid:userid 找到token ,刪除 此key 和token
再將第二人的登錄信息 插入到redis 中 .
這時(shí)第一人登錄的信息就會(huì)過(guò)期, 也就實(shí)現(xiàn)了踢下線
(為什么不做成第二人登錄時(shí)不放行, 因?yàn)橛锌赡苁堑?人和第2人都是用戶本人, 他可能會(huì)在第1個(gè)手機(jī)未退出登錄時(shí)更換另一個(gè)手機(jī)登錄,如果不放行,他必須等第1個(gè)token失效后才能使用 )
這個(gè)防過(guò)期的key 和token 的過(guò)期時(shí)間都是一樣
2 數(shù)據(jù)庫(kù)
同上面一樣, 在沒(méi)有redis 時(shí)使用數(shù)據(jù)庫(kù)存儲(chǔ)key