對cookie,session,token,jwt的理解


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

cookie

Cookie的誕生

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

Cookie的處理分為:

服務器像客戶端發送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重寫的方式發到服務器;

簡單來講,用戶訪問的時候說他自己是張三,他騙你怎么辦? 那就在服務器端保存張三的信息,給他一個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 在服務端使用密鑰校驗就可以,不用數據庫的查詢。

 


免責聲明!

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



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