會話保持:
方式:
1、session機制保持會話
缺點:
1.1當前服務器處於高併發的時候,對於服務器是一個壓力,佔用大量的服務器資源。
1.2如果一個業務系統是分佈式部署在多個服務器的情況下,session不能相互間共享。
解決方式:
1.3高併發的時候可以將session存儲到redis,如果用戶長時間沒有訪問,將session存儲到redis,就減少了服務器的壓力。
1.4分佈式或者集羣的時候,先通過redis來判斷用戶狀態也可以實現session共享.
2、cookie機制保持會話
登錄驗證後,創建登錄憑證(比如:用戶id+登錄時間+過期時間),將登錄憑證進行加密(爲了避免暴露信息),加密後寫到瀏覽器的cookie,以後,每次請求都發送cookie,服務器根據對應的解密算法對其進行驗證(或者將加密過的cookie內容存儲到數據庫,請求服務器的時候,服務器在數據庫進行查找)。
缺點:
2.1每次訪問都提交cookie,增加請求量
2.2其他訪問可能需要cookie(比如說購物車的信息存放在cookie),瀏覽器對每個域存儲的cookie的大小有限制,那麼需要控制加密後的憑證。
3、token機制保持會話
cookie 和session依賴於瀏覽器,如果客戶端不是瀏覽器,那麼需要手動添加token(和cookie類似,也是登錄憑證),將token添加到http header或者做爲參數添加到url。
缺點:
3.1每次訪問的時候手動添加token
3.2和cookie 的方式一樣增加了請求量
區別:
不同方式使用不同的應用場景
相同點:
1、所有的方式都是爲了驗證用戶的狀態
2、都需要在客戶端存儲憑證
不同點:
第一種是通過空間換時間,消耗內存存儲session對象,但是判斷用戶狀態不用複雜的邏輯。第二種第三種用時間換空間,在服務器端邏輯處理進行判斷用戶狀態。
會話保持應用場景:
比如一個淘寶網站,你在登錄了設備之後,點擊其他頁面(比如我的購物車),這個時候發現又需要再次登錄才能查看,再點擊其他界面(比如我的訂單)又需要重新登錄。用戶體驗不佳,這個時候就需要用到會話保持。
會話(連接)刪除機制:
負載均衡設備都有一個會話/連接的時間限制,目的是設備性能決定,畢竟設備的最大併發連接數是有限的。
非會話保持:
不需要登錄網站進行的操作,比如瀏覽新聞網站。常見策略:輪詢等。