對cookie,session,token,jwt的理解

對這幾個東西有點凌亂了,今天有時間整理下web

cookie

Cookie的誕生算法

因爲HTTP協議是無狀態的,而服務器端的業務必須是要有狀態的。Cookie誕生的最初目的是爲了存儲web中的狀態信息,以方便服務器端使用。好比判斷用戶是不是第一次訪問網站。目前最新的規範是RFC 6265,它是一個由瀏覽器服務器共同協做實現的規範。數據庫

Cookie的處理分爲:json

服務器像客戶端發送cookie後端

瀏覽器將cookie保存瀏覽器

以後每次http請求瀏覽器都會將cookie發送給服務器端緩存

session

1. 爲何要有session的出現?
答:是因爲網絡中http協議形成的,由於http自己是無狀態協議,這樣,沒法肯定你的本次請求和上次請求是否是你發送的。若是要進行相似論壇登錄相關的操做,就實現不了了。服務器

2. session生成方式?
答:瀏覽器第一次訪問服務器,服務器會建立一個session,而後同時爲該session生成一個惟一的會話的key,也就是sessionid,而後,將sessionid及對應的session分別做爲key和value保存到緩存中,也能夠持久化到數據庫中,而後服務器再把sessionid,以cookie的形式發送給客戶端。這樣瀏覽器下次再訪問時,會直接帶着cookie中的sessionid。而後服務器根據sessionid找到對應的session進行匹配;
還有一種是瀏覽器禁用了cookie或不支持cookie,這種能夠經過URL重寫的方式發到服務器;cookie

簡單來說,用戶訪問的時候說他本身是張三,他騙你怎麼辦? 那就在服務器端保存張三的信息,給他一個id,讓他下次用id訪問。網絡

token

概念: 訪問資源的令牌

驗證流程:

  1. 把用戶的用戶名和密碼發到後端

  2. 後端進行校驗,校驗成功會生成token, 把token發送給客戶端

  3. 客戶端本身保存token, 再次請求就要在Http協議的請求頭中帶着token去訪問服務端,和在服務端保存的token信息進行比對校驗。

特色:

客戶端每次都要攜帶token, 客戶端的內容比較多

 

JWT

概念: JSON WEB TOKEN 的簡寫。可使用在RESTFUL接口定義, 也可使用在普通的web

組成:

header

在header中聲明一些信息

payload、

簽證

 

驗證流程:

  1. 在頭部信息中聲明加密算法和常量, 而後把header使用json轉化爲字符串

  2. 在載荷中聲明用戶信息,同時還有一些其餘的內容;再次使用json 把載荷部分進行轉化,轉化爲字符串

  3. 使用在header中聲明的加密算法和每一個項目隨機生成的secret來進行加密, 把第一步分字符串和第二部分的字符串進行加密, 生成新的字符串。詞字符串是獨一無二的。

  4. 解密的時候,只要客戶端帶着JWT來發起請求,服務端就直接使用secret進行解密。

特色:

  1. 三部分組成,每一部分都進行字符串的轉化

  2. 解密的時候沒有使用數據庫,僅僅使用的是secret進行解密。

  3. JWT的secret千萬不能泄密!!!

token和jwt區別

服務端驗證客戶端發來的token信息要進行數據的查詢操做;JWT驗證客戶端發來的token 在服務端使用密鑰校驗就能夠,不用數據庫的查詢。

相關文章
相關標籤/搜索