Cookie、Session、Token的區別



眾所周知,我們訪問網頁一般都是使用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,相對來說更安全。

  • 產生的過程:

  1. 用戶第一次登錄,服務端會產生一個Token,Token會存在於服務器的數據庫上,然后將這個Token返回給瀏覽器。
  2. 客戶端收到Token之后會將Token存儲在本地上。
  3. 客戶端再次發送請求的時候,會將Token發送到服務器上。
  4. 服務端收到這個Token時會將Token與自己本地的Token進行比較,得以來驗證身份。
  • Token在項目中的應用場景:

    一般用於App項目登錄鑒權或接口鑒權。因為App項目和接口客戶端都不是瀏覽器,因此就沒有Cookie和Session。所以通過Token來鑒權。

  • 有些系統的Token直接顯示在后面的頁面上,而接口的Token一般在登錄接口的返回值里面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM