眾所周知,我們訪問網頁都是使用的http協議,而http協議的每一次訪問都是無狀態的,
也就是說這一次請求和上一次請求是沒有任何關系的,互不認識的,沒有關聯的,這種無狀態的的好處是快速,壞處就是無法把兩次請求關聯起來,
Cookie、Session、Token就是用來做持久化處理的,目的就是讓客戶端和服務端互相認識,將兩次請求關聯起來,
Cookie:
-
Cookie是一個非常具體的東西,指的就是瀏覽器里面能永久存盤的一種資料,僅僅是瀏覽器實作的一種資料存盤功能,
-
Cookie由服務器生成,通過回應頭Set-Cookie欄位發送給瀏覽器,瀏覽器把Cookie以Key Value形式保存到某個目錄下的文本檔案里,下一次請求同一個網站時就會把Cookie發送給服務器,由于Cookie是存盤在客戶端上的,所以瀏覽器加入了一些限制確保Cookie不會被惡意使用,同時不會占據太多磁盤空間,所以每個域的Cookie數量是有限的,
-
Cookie在專案中的應用場景:
- 日常登錄一個網站,今天輸入用戶名密碼登錄成功了,第二天無需要重新輸入用戶名和密碼,這個時候用到的一個機制就是Cookie,
- 瀏覽器記錄用戶瀏覽過的網頁,
-
總結:
-
Cookie由服務器生成,存盤在客戶端,
-
Cookie的資料格式為鍵值對,Cookie資料有失效時間看expire值,
-
在專案中主要用于記住用戶名密碼或記錄用戶瀏覽過的網頁,
-
Session:
-
Session從字面上解釋就是“會話”,服務器要知道當前發請求給自己的是誰,為了做這種區分,服務器就要給每個客戶端分配不同的“身份標識”,然后客戶端每次想服務器發請求時,都帶上這個“身份標識”,服務器就知道這個請求來自于誰,至于客戶端怎么保存這個“身份標識”,可以有很多種方式,對于瀏覽器客戶端,默認采用Cookie的方式,
-
服務器使用Session把用戶的資訊臨時保存在服務器上,用戶離開網站后Session會被銷毀,這種用戶資訊存盤方式相對于Cookie來說更安全,可是Session有一個缺陷就是如果web服務器做了負載均衡,那么下一個操作請求到了另一臺服務器的時候Session會丟失,
-
session在專案中的應用場景:
- 一般只保存登錄用戶的用戶名,時長默認是30分鐘,所以為什么當你登錄系統后一段時間不使用就需要重新登錄,因為30分鐘后Session就已經丟失了,
-
總結:
- Session由Web服務器生成,保存在服務端,
- Session的資料格式也是鍵值對,
- Session默認失效時間為30分鐘,一般在瀏覽器的開發者工具(F12)的回應頭的Cookie(或Set-Cookie)中查看,在專案中主要用于鑒權判斷是否登錄狀態,只有是登錄狀態才可以訪問服務器的網頁和資料,
Token:
-
Token字面意思就是“令牌”,用戶身份的驗證方式,有點類似于Cookie,相對來說更安全,
-
產生的程序:
- 用戶第一次登錄,服務端會產生一個Token,Token會存在于服務器的資料庫上,然后將這個Token回傳給瀏覽器,
- 客戶端收到Token之后會將Token存盤在本地上,
- 客戶端再次發送請求的時候,會將Token發送到服務器上,
- 服務端收到這個Token時會將Token與自己本地的Token進行比較,得以來驗證身份,
-
Token在專案中的應用場景:
一般用于App專案登錄鑒權或介面鑒權,因為App專案和介面客戶端都不是瀏覽器,因此就沒有Cookie和Session,所以通過Token來鑒權,
-
有些系統的Token直接顯示在后面的頁面上,而介面的Token一般在登錄介面的回傳值里面,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252492.html
標籤:其他
