幾種保持登陸狀態的方式
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對象,可是判斷用戶狀態不用複雜的邏輯。第二種第三種用時間換空間,在服務器端邏輯處理進行判斷用戶狀態。
我以爲分享是一種精神,分享是個人樂趣所在,不是說我以爲我講得必定是對的,我講得可能不少是不對的,可是我但願我講的東西是我人生的體驗和思考,是給不少人反思,也許給你一秒鐘、半秒鐘,哪怕說一句話有點道理,引起本身心裏的感觸,這就是我最大的價值。(這是我喜歡的一句話,也是我寫博客的初衷)
歡迎關注本站公眾號,獲取更多信息