利用Redis實現用戶校驗功能

傳統實現方式:

一般單臺服務器下用戶登陸後直接在服務器保存用戶的session信息。然後前端請求後臺的時候攜帶用戶的cookie信息過來,服務器通過JESSIONID參數查找session信息。如果可以查找到session信息,說明用戶是有效的登陸狀態,無需用戶重複登陸,如果查找不到session信息則說明用戶尚未登陸或者登陸態已經失效需要重新登陸。

 

傳統方式爲什麼不建議使用?

當應用面向大量的用戶,併發量大且需要爲用戶提供24小時不間斷的服務時,建議採用集羣的架構。在集羣架構下,用戶的請求就有可能落到不同的服務器上,假設用戶登陸的時候請求的是A服務器,session則記錄在A服務器上。如果用戶其他的操作如出單落在了B服務器上,那麼根據JESSIONID在B服務器上查找session信息就會查詢不到。這樣就會讓用戶在此登陸。影響用戶體驗。

 

解決方案:

基於上面的案例問題,可以採用Token的概念替代了Session。並且沒有把Token信息保存在應用服務器上,而是保存在了redis服務器中。之所以用redis因爲redis爲單線程的緩存服務器,支持大併發高速查詢。

Token同時在用戶登陸成功後返回給前端,以後前端每次查詢都會攜帶Token信息。服務器接受到用戶的Token後,根據Token查詢Redis服務器是否存在用戶信息,如果存在,則說明用戶已登陸。這樣即使用戶在A服務器登陸,在B服務器上通過Token也可以查詢到用戶的登陸信息,就不必重複登陸了。完美解決了傳統方式導致用戶重複登陸的問題。

 

Token 信息安全問題解決方案:

用戶每次登陸的Token信息都是不同的,生產規則是根據用戶ID(用戶唯一標識)+時間戳+隨機數等信息拼接並通過aes加密。並且前後端採用https通訊方式避免劫持。所以不會存在安全性的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章