關於cookie,session和token

一.理解HTTP「無狀態」的含義html

  咱們知道,HTTP是一種無狀態的協議,客戶端與服務器創建鏈接並傳輸數據,數據傳輸完成後,鏈接就會關閉。redis

  舉個栗子,若是在無狀態狀況下訪問淘寶,會出現如下場景:數據庫

  1)打開淘寶的url,在這一步輸入用戶名和密碼;後端

  2)在首頁選擇同樣商品,點擊進去,又提示須要從新登陸。由於HTTP是無狀態的,雖然在第1步中已經輸入了用戶名和密碼,但咱們的客戶端不會記住上一步輸入的用戶名和密碼,而服務器也不會記住已登陸的狀態;瀏覽器

  通過上述例子,咱們能夠把「無狀態」理解爲:不會對本次會話設置緩存區,來分別記錄客戶端和服務器在臨時會話中產生的數據緩存

  理解了HTTP無狀態的含義,再去看cookie,session和token的概念。安全

二.cookie的概念 服務器

  cookie是HTTP定義在header中的一個字段,是具體存在於瀏覽器上的,僅僅是瀏覽器實現的一種數據存儲功能。它是session的一種後端無狀態實現。cookie

  cookie由服務器生成,發送給客戶端的,客戶端把cookie以kv形式保存到某個目錄下的文本文件內,下一次請求同一網站時會把該cookie發送給服務器。因爲cookie是存在客戶端上的,因此瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會佔據太多磁盤空間,因此每一個域的cookie數量是有限的。網絡

3、session

  Session在廣義上是指一種網絡通信的會話機制,用於跟蹤用戶;在狹義上,Session是在服務器端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據能夠保存在集羣、數據庫、文件中:

  

  1)客戶端第一次請求服務器;

  2)第一次建立session時,服務器在內存中開闢一塊空間,並返回Session ID;

  3)由於服務器須要記錄用戶狀態,故在響應信息中包含一個SetCookie的響應頭,要求客戶端在Cookie中記錄Seesion ID;

  4)客戶端根據SetCookie中的響應頭信息,將sessionID存儲在Cookie中;

  5)再次請求服務器,客戶端會在請求頭信息中攜帶Cookie請求頭;

  6)服務器根據客戶端攜帶的請求頭進行用戶身份、狀態等較驗。

  由上圖中的步驟能夠得知,從廣義上講,session是一種網絡通信的會話機制,用於跟蹤用戶。而cookie在這個過程當中的做用是用於保存Session ID的。cookie只是目前用於實現session機制的主流方案之一。

4、token

  token是存儲在客戶端的令牌,通常用於身份校驗。

   

 

  值得一提的是,在上述步驟②生成token時會加入有效期,而在步驟⑥解析token時,也會去判斷token是否過時。

  步驟④存儲token時,能夠存儲在cookie或者redis中。

  步驟⑤攜帶token時,能夠在url中攜帶,也能夠在post請求或http的header中攜帶。

5、session和token的區別

   1)token和session都用於身份驗證,session是會話,token是令牌;

  2)身份認證 token的安全性要高於session,由於每一個請求都有簽名還能防止監聽以及重放攻擊,而session必須靠鏈路層來保障通信安全。

  3)session和token都須要去管理過時時間。

 

HTTP「無狀態」的解釋:http://www.javashuo.com/article/p-wzffznna-hb.html

cookie,session,token的概念:https://blog.csdn.net/lcgoing/article/details/86754955

https://www.zhihu.com/question/19786827/answer/28752144

相關文章
相關標籤/搜索