session與token

session

瀏覽器第一次訪問服務器,服務器會創建一個session,然後同時為該session生成一個唯一的會話的key,也就是sessionid,然後,將sessionid及對應的session分別作為key和value保存到緩存中,也可以持久化到數據庫中,然後服務器再把sessionid,以cookie的形式發送給客戶端。這樣瀏覽器下次再訪問時,會直接帶著cookie中的sessionid。然後服務器根據sessionid找到對應的session進行匹配;

還有一種是瀏覽器禁用了cookie或不支持cookie,這種可以通過URL重寫的方式發到服務器;

token

  • Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。
  • Token的定義:Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄後,服務器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。
  • 使用Token的目的:Token的目的是為了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。

瞭解了Token的意義後,我們就更明確的知道為什麼要用他了。

token和session其實都是為了身份驗證,session一般翻譯為會話,而token更多的時候是翻譯為令牌;

session服務器會保存一份,可能保存到緩存,文件,數據庫;同樣,session和token都是有過期時間一說,都需要去管理過期時間;

其實token與session的問題是一種時間與空間的博弈問題,session是空間換時間,而token是時間換空間。兩者的選擇要看具體情況而定。

雖然確實都是“客戶端記錄,每次訪問攜帶”,但 token 很容易設計為自包含的,也就是說,後端不需要記錄什麼東西,每次一個無狀態請求,每次解密驗證,每次當場得出合法 /非法的結論。這一切判斷依據,除了固化在 CS 兩端的一些邏輯之外,整個信息是自包含的。這才是真正的無狀態。

而 sessionid ,一般都是一段隨機字符串,需要到後端去檢索 id 的有效性。


分享到:


相關文章: