對這幾個東西有點凌亂了,今天有時間整理下
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
概念: 訪問資源的令牌
驗證流程:
-
把用戶的用戶名和密碼發到后端
-
后端進行校驗,校驗成功會生成token, 把token發送給客戶端
-
客戶端自己保存token, 再次請求就要在Http協議的請求頭中帶着token去訪問服務端,和在服務端保存的token信息進行比對校驗。
特點:
客戶端每次都要攜帶token, 客戶端的內容比較多
JWT
概念: JSON WEB TOKEN 的簡寫。可以使用在RESTFUL接口定義, 也可以使用在普通的web
組成:
header
在header中聲明一些信息
payload、
簽證
驗證流程:
-
在頭部信息中聲明加密算法和常量, 然后把header使用json轉化為字符串
-
在載荷中聲明用戶信息,同時還有一些其他的內容;再次使用json 把載荷部分進行轉化,轉化為字符串
-
使用在header中聲明的加密算法和每個項目隨機生成的secret來進行加密, 把第一步分字符串和第二部分的字符串進行加密, 生成新的字符串。詞字符串是獨一無二的。
-
解密的時候,只要客戶端帶着JWT來發起請求,服務端就直接使用secret進行解密。
特點:
-
三部分組成,每一部分都進行字符串的轉化
-
解密的時候沒有使用數據庫,僅僅使用的是secret進行解密。
-