web基礎系列
三種保持會話的方式
(一)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對象,但是判斷用戶狀態不用復雜的邏輯。第二種第三種用時間換空間,在服務器端邏輯處理進行判斷用戶狀態。