淺談Session、Cookie

爲什麼需要Session、Cookie

Http是一個無狀態協議,所以我們需要記錄用戶的狀態,好讓服務端識別我們是哪個用戶

Session

由於HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態,需要爲用戶創建Session來識別用戶,Session保存在服務端的內存(或者數據庫、文件),有唯一標識SessionId,Session的運行依賴於SessionId

服務端如何識別特定的用戶呢?SessionId存放在Cookie,每次HTTP請求客戶端都會 發送相應的Cookie信息到服務端,通過Cookie來實現Session的跟蹤,第一次創建Session時,服務端會在HTTP協議中告訴客戶端,需要在Cookie裏面記錄一個SessionId,以後每次請求把這個會話ID發送到服務器。

Session由於是保存在服務端,所以當訪問量增多時,服務器的性能也會消耗

Cookie

Cookie是服務器在用戶訪問Internet站點時傳遞到瀏覽器的消息。瀏覽器會將每條消息以名稱 - 值對的形式存儲在客戶端的一個小文件中。當用戶從服務器請求另一個頁面時,瀏覽器會將cookie發送回服務器。這些文件通常包含有關用戶訪問網頁的信息,以及用戶自願提供的任何信息,例如:用戶信息,用戶首選項,密碼記住選項等。

Cookie用着爽,簡單、輕便,持久化,易於管理。但是Cookie的安全性不夠

Cookie只是實現Session的一種方案

Cookie只是實現Session的一種常見方案,但並不是唯一的。我們還可以使用URL重寫技術進行會話跟蹤,每次HTTP交互,URL後面都會被附加上一個諸如 sid=xxxxx 這樣的參數,服務端據此來識別用戶),

比較

Cookie數據保存在客戶端,而Session數據保存在服務器上,相對安全性更高,但是當Session到一定數量,服務器的性能也會有所消耗

如何解決分佈式情況下的會話管理

由於session只存在於一個服務器,所以在多個服務器無法共享,我們可以
1.將session存在redis中
2.使用JWT令牌,客戶端維持會話,每次請求帶着token,服務端驗證token

token認證流程

  • 用戶登錄成功後,服務端返回token給客戶端
  • 客戶端保存token
  • 再之後的每一次請求,客戶端都會在請求頭中加入token,服務端接收到token進行驗證
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章