衆所周知,咱們訪問網頁都是使用的http協議,而http協議的每一次訪問都是無狀態的。
也就是說這一次請求和上一次請求是沒有任何關係的,互不認識的,沒有關聯的。這種無狀態的的好處是快速,壞處就是沒法把兩次請求關聯起來。web
Cookie、Session、Token就是用來作持久化處理的,目的就是讓客戶端和服務端互相認識,將兩次請求關聯起來。數據庫
Cookie
:瀏覽器
Cookie是一個很是具體的東西,指的就是瀏覽器裏面能永久存儲的一種數據,僅僅是瀏覽器實現的一種數據存儲功能。安全
Cookie由服務器生成,經過響應頭Set-Cookie字段發送給瀏覽器,瀏覽器把Cookie以Key Value形式保存到某個目錄下的文本文件裏,下一次請求同一個網站時就會把Cookie發送給服務器。因爲Cookie是存儲在客戶端上的,因此瀏覽器加入了一些限制確保Cookie不會被惡意使用,同時不會佔據太多磁盤空間,因此每一個域的Cookie數量是有限的。服務器
Cookie在項目中的應用場景:session
總結:負載均衡
Cookie由服務器生成,存儲在客戶端。工具
Cookie的數據格式爲鍵值對,Cookie數據有失效時間看expire值。網站
在項目中主要用於記住用戶名密碼或記錄用戶瀏覽過的網頁。code
Session
:
Session從字面上解釋就是「會話」。服務器要知道當前發請求給本身的是誰。爲了作這種區分,服務器就要給每一個客戶端分配不一樣的「身份標識」,而後客戶端每次想服務器發請求時,都帶上這個「身份標識」,服務器就知道這個請求來自於誰。至於客戶端怎麼保存這個「身份標識」,能夠有不少種方式,對於瀏覽器客戶端,默認採用Cookie的方式。
服務器使用Session把用戶的信息臨時保存在服務器上,用戶離開網站後Session會被銷燬。這種用戶信息存儲方式相對於Cookie來講更安全,但是Session有一個缺陷就是若是web服務器作了負載均衡,那麼下一個操做請求到了另外一臺服務器的時候Session會丟失。
session在項目中的應用場景:
總結:
Token
:
Token字面意思就是「令牌」,用戶身份的驗證方式,有點相似於Cookie,相對來講更安全。
產生的過程:
Token在項目中的應用場景:
通常用於App項目登陸鑑權或接口鑑權。由於App項目和接口客戶端都不是瀏覽器,所以就沒有Cookie和Session。因此經過Token來鑑權。
有些系統的Token直接顯示在後面的頁面上,而接口的Token通常在登陸接口的返回值裏面。