三種保持會話的方式
(一)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對象,但是判斷使用者狀态不用複雜的邏輯。第二種第三種用時間換空間,在伺服器端邏輯處理進行判斷使用者狀态。