系統要求用戶在使用過程當中,不能再以此用戶重復登錄系統,請問下大家都是用的怎樣一個方案解決的?
2 回答

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
分兩種情況:
一. 如果用戶001在客戶端A登錄, 然后在客戶端B登錄, 系統強制A下線.
二. 如果用戶001在客戶端A登錄, 然后在客戶端B登錄, 提示001已經登錄, 禁止其登錄.
下面介紹下我對方案二的看法:
在集群的情況下, 需要使用中心的cache集群(比如memcached). 為了達到一個時刻一個用戶僅有一個會話, 需要做一個userId(用戶在系統的唯一標識, 或者memberId之類的)的緩存. 下面幾個問題需要注意:
1. 當用戶登錄時, 首先需要查詢當前用戶對應的userId在緩存中是否已經存在. 如果存在, 拒絕登錄
2. userId在緩存中的超時時間應該和session保持一致. 當訪問系統時, 同時也需要延長userId的生命周期. 可以每N分鐘刷新一次.
3. 當系統退出時, 在清除session的同時也需要清除userId.
4. 存在的問題: 如果客戶端是瀏覽器. 在用戶001在瀏覽器A登錄后, 以非常規的方式登出, 比如關閉瀏覽器而不是點擊登出按鈕, 此時服務中userId的緩存任然存在, 用戶無法在其他瀏覽器中登錄, 只能等到緩存失效后方能登錄. 基于這個原因. 我推薦選擇方案一
- 2 回答
- 0 關注
- 295 瀏覽
添加回答
舉報
0/150
提交
取消