天天看點

三種保持會話的方式

三種保持會話的方式

(一)session機制保持會話

使用方法可以看 白話講session

存在的問題

高并發情況下,會占用伺服器大量記憶體

分布式(一個業務分成幾個子業務,部署在多個伺服器)或者叢集(一個業務部署在多個伺服器)的時候,session不能共享。

解決方案

高并發的時候可以将session存儲到redis,如果使用者長時間沒有通路,将session存儲到redis,就減少了伺服器的壓力。

分布式或者叢集的時候,先通過redis來判斷使用者狀态也可以實作session共享.

(二)cookie機制保持會話

使用的方法

登入驗證後,建立登入憑證(比如:使用者id+登入時間+過期時間),将登入憑證進行加密(為了避免暴露資訊),加密後寫到浏覽器的cookie,以後,每次請求都發送cookie,伺服器根據對應的解密算法對其進行驗證(或者将加密過的cookie内容存儲到資料庫,請求伺服器的時候,伺服器在資料庫進行查找)。

存在的問題

每次通路都送出cookie,增加請求量

其他通路可能需要cookie(比如說購物車的資訊存放在cookie),浏覽器對每個域存儲的cookie的大小有限制,那麼需要控制加密後的憑證。

(三)token機制保持會話

使用方法

cookie 和session依賴于浏覽器,如果用戶端不是浏覽器,那麼需要手動添加token(和cookie類似,也是登入憑證),将token添加到http header或者做為參數添加到url。

存在的問題

每次通路的時候手動添加token

和cookie 的方式一樣增加了請求量

總結

不同的方式适合不同的應用場景,視情況使用。

相同點

所有的方式目的都是為了驗證使用者狀态。

都需要在用戶端存儲憑證。

不同點

第一種是通過是通過空間換時間,消耗記憶體存儲session對象,但是判斷使用者狀态不用複雜的邏輯。第二種第三種用時間換空間,在伺服器端邏輯處理進行判斷使用者狀态。