登陸狀態cookie+session和token的區別

前端開發登錄狀態的保持,主要有兩種方法:cookie+session 和 token技術

登錄狀態保持,起源於http的無狀態,無記憶

1. 最早的時候,web的作用就是網頁的瀏覽。 服務器只用提供簡單的網頁瀏覽器操作即可,不用記住剛剛誰發了請求,更沒有登錄,註冊之類的操作

2. http設計之初就是無狀態的

3. http無狀態: http不會記住每一次的請求  就跟公交車司機不會記住乘客一樣

4. 這段時間很嗨皮,業務邏輯非常簡單。

cookie+session實現登錄狀態保持

1.隨着交互型的網頁的興起,在線購物網站,需要登錄的網站變得越來越多。但是http是無狀態的

2.通過cookie+session實現狀態保持

3.服務端登錄的時候,給分配一個session用於存儲數據,同時將sessionID返回給瀏覽器

4.瀏覽器通過cookie把sessionID存儲起來,下次訪問時攜帶上

5.服務端就可以通過sessionID來確定用戶是否登錄【喝咖啡的例子】

cookie+session實現狀態保持的缺點

1.通過cookie+sesion技術實現了狀態的保持,大家都很嗨皮

2.服務端不嗨皮了,原因如下:

    -每個人登錄都需要在服務端開闢一塊空間來信息,如果訪問的人越來越多了,該怎麼辦?

    -浪費了大量的內存,對於服務器來說是一個很大的開銷。

    -手機端很多瀏覽器不支持cookie或者是禁用cookie

    -如果要集羣了,會很麻煩

集羣+session持久化

1.因爲需要訪問的用戶越來越多,一臺服務器扛不住壓力了

2.那就準備2臺,3臺,甚至是更多的服務器進行服務

3.問題:如果小明的請求第一次訪問了A服務器,下一次訪問了B服務器怎麼辦?

4.可以通過session共享解決,也就是在每一臺服務器中都共享所有的用戶信息,這樣就佔用了更多的服務器內存

5.通過數據持久化解決,使用緩存(redis/Memcached),將所有的session存儲到數據庫中,所有的session都統一去數據庫中進行查找

6.服務端也嗨皮了,但是數據庫服務器崩了咋辦???

登錄狀態保持-token技術

token的基本介紹

1.想想,我們爲什麼要存儲session呢,浪費大量的內存,要是不存該有多好啊,但是不存儲session,我怎麼驗證合法用戶?關鍵點就在於驗證服務端不存儲任何的數據,我還能驗證你的真實身份

2.新的想法產生了:當小明登錄系統的時候,根據小明的用戶名生成一個token(令牌),把令牌交給小明,服務端不做任何存儲。下次小明登錄時,小明帶上token進行訪問,服務端對token進行校驗,當然這個令牌必須是通過一定的算法進行嚴格加密的,只有服務器才能解析校驗

3.校驗token比存儲session省事多了

token的優勢

1. token無狀態,服務端不用存儲token,服務端只需要簽發和校驗token即可。

2. 集羣:token是無狀態,集羣的時候,算法一致,無論訪問哪臺服務器,都是一樣的

3. 性能: 解析token效率比查詢數據庫高的多

4. 跨站點:只要服務端算法一致,token就可以誇站點登錄

5. 移動端:在移動端開發中,使用cookie非常麻煩,使用token驗證非常常見

token的使用

1.客戶端收到服務器返回的JWT,可以儲存在Cookie裏面,也可以儲存在localStorage。

2.此後,客戶端每次與服務器通信,都要帶上這個JWT。你可以把它放在Cookie裏面自動發送,但是這樣不能跨域,所以更好的做法是放在HTTP請求的頭信息Authorization字段裏面。

作者:香泡泡
鏈接:https://www.jianshu.com/p/79225bd8a9c9
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章