cookie+session+token詳解

一,基礎
首先要明白cookie+session,token。是兩套東西,並且session不是前端存儲的session

1,什麼是session+cookie?
session+cookie舉例:第一次請求時候,伺服器生成一個信物,並要求客戶端也定一個信物。每次請求時候你都帶上信物,你我信物一對比,OK了。信物有過期時間。
伺服器會生成一個信物儲物櫃(占空間),用來存取信物(cookie),本質是空間換時間,時間即沒有計算耗時。

2,什麼是token?
token舉例:一開始登錄給你一個暗號,定一套密鑰,下次你發起請求,伺服器拿密鑰驗證你的暗號,對上了就驗證通過,我不需要每次都保存你的東西。
多了個計算驗證環節,是時間換空間

3,區別導致的影響
(1)影響點就是時間和空間的區別,和安全問題
(2)先說空間,伺服器A爆滿的時候需要負載均衡,我A這的儲物櫃,你B沒有吧?又不可能把全部儲物櫃複製一套給你,我A都要爆了。就導致身份無法識別要重新登錄

二,進階
一. 為什麼需要Cookie?
HTTP是一種無狀態的協議,客戶端與伺服器建立連接並傳輸數據,數據傳輸完成後,連接就會關閉。Cookie是解決HTTP無狀態性的有效手段,
伺服器可以設置或讀取Cookie中所包含的資訊。當用戶登錄後,伺服器會發送包含登錄憑據的Cookie到用戶瀏覽器客戶端,
而瀏覽器對該Cookie進行某種形式的存儲(記憶體或硬碟)。用戶再次訪問該網站時,瀏覽器會發送該Cookie到伺服器,伺服器對該憑據進行驗證,
合法時使用戶不必輸入用戶名和密碼就可以直接登錄。

Cookie的類型

Cookie總時由用戶客戶端進行保存的,按其存儲位置可分為:記憶體式Cookie和硬碟式Cookie。記憶體式Cookie存儲在記憶體中,瀏覽器關閉後就會消失,
因此也被稱為非持久Cookie或會話Cookie。
硬碟式Cookie保存在硬碟中,其不會隨瀏覽器的關閉而消失,除非用戶手工清理或到了過期時間,因此也被稱為持久Cookie。

二.Session和Cookie區別
1.Cookie和Session都是會話技術,Cookie是運行在客戶端,Session是運行在伺服器端。

2.Cookie有大小限制以及瀏覽器在存cookie的個數也有限制,Session是沒有大小限制和伺服器的記憶體大小有關。

3.Cookie有安全隱患,通過攔截或本地文件找得到你的cookie後可以進行攻擊。

4.Session是保存在伺服器端上會存在一段時間才會消失,如果session過多會增加伺服器的壓力。

三.Session與Token的區別
1.token和session都是為了身份驗證,session被翻譯為會話,token被翻譯為令牌。

2..身份認證 token安全性比session好,因為每個請求都有簽名還能防止監聽以及重放攻擊,而session就必須靠鏈路層來保障通訊安全。

3.session和token都需要去管理過期時間。

4.時間與空間的博弈:session是空間換時間,而token是時間換空間。
四.Cookie原理
Cookie定義了一些HTTP請求頭和HTTP響應頭,通過這些HTTP頭資訊使伺服器可以與客戶進行狀態交互。客戶端請求伺服器後,如果伺服器需要記錄用戶狀態,
伺服器會在響應資訊中包含一個Set-Cookie的響應頭,客戶端會根據這個響應頭存儲Cookie資訊。再次請求伺服器時,客戶端會在請求資訊中包含一個Cookie請求頭,
而伺服器會根據這個請求頭進行用戶身份、狀態等較驗。

五.Session原理
當你一次訪問伺服器的時候,伺服器會在記憶體中開闢一塊空間,返回唯一一把打開該空間的鑰匙,再把這把鑰匙返回到瀏覽器。
當你第二次訪問的時候瀏覽器會攜帶這把鑰匙到伺服器端打開對應的空間,如果該空間已經銷毀又重新返回開闢一塊新的空間返回新的鑰匙到瀏覽器。

六.Token原理
瀏覽器第一次訪問伺服器,根據傳過來的唯一標識userId,服務端會通過一些演算法,如常用的HMAC-SHA256演算法,然後加一個密鑰,生成一個token,
然後通過BASE64編碼一下之後將這個token發送給客戶端;客戶端將token保存起來,下次請求時,帶著token,伺服器收到請求後,
然後會用相同的演算法和密鑰去驗證token,如果通過,執行業務操作,不通過,返回不通過資訊。