在分散式環境中如何解決session共享問題
一、什麼是session
session在計算機中,尤其是在網路應用中,稱為”會話控制“。Session物件儲存特定使用者會話所需的屬性及配置資訊。這樣,當用戶在應用程式的web頁面之間跳轉時,儲存在session物件中的變數將不會丟失,而在整個使用者會話中一直存在下去。
二、產生session不一致原因
單臺tomcat沒有任何問題,但現在是叢集的tomcat因此就存在session不一致問題。如圖
三、解決方案
(1)session複製
tomcat的session複製,可以實現session共享
優點:不需要額外開發,只需搭建tomcat叢集即可
缺點:tomcat 是全域性session複製,叢集內每個tomcat的session完全同步(也就是任何時候都完全一樣的) 在大規模應用的時候,使用者過多,叢集內tomcat數量過多,session的全域性複製會導致叢集效能下降, 因此,tomcat的數量不能太多,5個以下為好。
(2)session繫結
當用戶A第一次訪問系統時,tomcat1對其進行服務,那麼,下次訪問時仍然讓tomcat1對其進行服務
(3)使用redis集中管理session
可以將使用者的會話儲存在redis中,每次從redis中查詢使用者資訊,就可以很好的解決會話共享問題。如圖:
四、實際應用
(1)使用者登入問題
對於大型分散式系統,可以使用單點登入系統進行登入,其中使用者的session儲存在redis快取系統中
(2)使用者簡訊驗證
當需要對使用者簡訊進行校驗前,調取第三方服務獲取驗證碼,需要先將驗證碼儲存在session中,然後與使用者提交的驗證碼進行比對