天天看點

cookie session token差別_Android網絡程式設計-Cookie,Session,TokenCookieSessionToken差別參考

HTTP協定是無狀态的,每次HTTP請求響應後,就會斷開這次連接配接。如果用戶端再次發送請求,服務端也不能識别出這個用戶端是不是上次請求過的用戶端,HTTP協定不能進行會話跟蹤。而Cookie,Session,Token正是為了解決HTTP協定無狀态問題。

Cookie

Cookie機制是在用戶端實作,采用用戶端保持狀态的方案。Cookie由服務端生成,發送給用戶端(Set-Cookie),用戶端請求的時候會帶上這個Cookie。請求流程:

cookie session token差別_Android網絡程式設計-Cookie,Session,TokenCookieSessionToken差別參考

Cookie字段:名字、值、過期時間、路徑和域。路徑與域一起構成Cookie的作用範圍。通過Chrome的開發者工具中看到,在github.com上儲存在用戶端的Cookie資訊。

cookie session token差別_Android網絡程式設計-Cookie,Session,TokenCookieSessionToken差別參考
  • Name:名字
  • Value:值
  • Domain:域
  • Path:路徑
  • Expaires/Max-Age:過期時間

上圖中logged_in和user_session兩個Cookie值表示登入github.com後儲存下來的登入狀态和Session。

Session

Session是在服務端實作,當用戶端請求服務端時,服務端會檢查請求中是否包含Session辨別(Session id),

  • 如果沒有,那麼服務端就生成一個随機的Session以及和它比對的Session id,并将Session id傳回給用戶端。
  • 如果有,那麼伺服器就在存儲中根據Session id 查找到對應的Session。

Token

Token也稱作令牌,由uid+time+sign[+固定參數]組成:

  • uid:使用者唯一身份辨別
  • time:目前時間的時間戳
  • sign:簽名, 使用 hash/encrypt 壓縮成定長的十六進制字元串,可以防止惡意第三方拼接Token請求伺服器

以下幾點特性會讓你在程式中使用基于Token的身份驗證:

  • 無狀态、可擴充
  • 支援移動裝置
  • 跨程式調用
  • 安全

Token是有用戶端來儲存,使用者的狀态在服務端的記憶體中是不存儲的,是以這是一種無狀态的認證機制。而認證的具體流程如下:

用戶端使用使用者名跟密碼請求登入服務端收到請求,去驗證使用者名與密碼驗證成功後,服務端會簽發一個 Token,再把這個 Token 發送給用戶端用戶端收到 Token 以後可以把它存儲起來,比如放在 Cookie 裡或者 Local Storage 裡用戶端每次向服務端請求資源的時候需要帶着服務端簽發的 Token服務端收到請求,然後去驗證用戶端請求裡面帶着的 Token,如果驗證成功,就向用戶端傳回請求的資料

第三方授權登入

這是Token的一種應用場景,使用OAuth實作。OAuth(開放授權)是一個開放标準,允許使用者讓第三方應用通路該使用者在某一網站上存儲的私密的資源(如照片,視訊,聯系人清單),而無需将使用者名和密碼提供給第三方應用。OAuth允許使用者提供一個令牌,而不是使用者名和密碼來通路他們存放在特定服務提供者的資料。我們看下github的授權流程:

cookie session token差別_Android網絡程式設計-Cookie,Session,TokenCookieSessionToken差別參考

差別

Cookie和Session

cookie session token差別_Android網絡程式設計-Cookie,Session,TokenCookieSessionToken差別參考

Token和Session

作為身份認證Token安全性比Session好。Session是一種HTTP存儲機制,目的是為無狀态的HTTP提供的持久機制。Token,如果指的是OAuth Token 或類似的機制的話,提供的是認證和授權 ,認證是針對使用者,授權是針對App。

參考

  • Cookie、Session、Token那點事兒
  • 徹底了解cookie,session,token
  • 精讀《圖解HTTP》