Cookie、Session、Token的區別

衆所周知,咱們訪問網頁都是使用的http協議,而http協議的每一次訪問都是無狀態的。
也就是說這一次請求和上一次請求是沒有任何關係的,互不認識的,沒有關聯的。這種無狀態的的好處是快速,壞處就是沒法把兩次請求關聯起來。web

Cookie、Session、Token就是用來作持久化處理的,目的就是讓客戶端和服務端互相認識,將兩次請求關聯起來。數據庫

Cookie瀏覽器

  • Cookie是一個很是具體的東西,指的就是瀏覽器裏面能永久存儲的一種數據,僅僅是瀏覽器實現的一種數據存儲功能。安全

  • Cookie由服務器生成,經過響應頭Set-Cookie字段發送給瀏覽器,瀏覽器把Cookie以Key Value形式保存到某個目錄下的文本文件裏,下一次請求同一個網站時就會把Cookie發送給服務器。因爲Cookie是存儲在客戶端上的,因此瀏覽器加入了一些限制確保Cookie不會被惡意使用,同時不會佔據太多磁盤空間,因此每一個域的Cookie數量是有限的。服務器

  • Cookie在項目中的應用場景:session

    • 平常登陸一個網站,今天輸入用戶名密碼登陸成功了,次日無須要從新輸入用戶名和密碼。這個時候用到的一個機制就是Cookie。
    • 瀏覽器記錄用戶瀏覽過的網頁。
  • 總結:負載均衡

    • Cookie由服務器生成,存儲在客戶端。工具

    • Cookie的數據格式爲鍵值對,Cookie數據有失效時間看expire值。網站

    • 在項目中主要用於記住用戶名密碼或記錄用戶瀏覽過的網頁。code

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通常在登陸接口的返回值裏面。

相關文章
相關標籤/搜索