1. 程式人生 > >Token的詳解與應用

Token的詳解與應用

@Token的詳解與應用

什麼是Token?

Token是服務端生成的一串字串,充當客戶端進行請求的一個令牌,當第一次登入後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求資料即可,無需再次帶上使用者名稱和密碼。

為什麼要用Token?

隨著近幾年上網裝置的多樣化,軟體專案的UI層不僅僅再是窗體、html,還有iOS、安卓app,因此基於Servlet的HTTP Session也就不再適用,因為可能沒有瀏覽器和html頁面,也沒有cookie了。
這種情況下,就需要Token技術來完成使用者的跟蹤,使得一個賬戶可以從html登入、也可以從手機app等其它客戶端登入。

Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。

Token的特點

  1. 無狀態、可擴充套件
  2. 跨程式呼叫
  3. 支援平臺較多瀏覽器,手機APP,電視機等支援平臺較多瀏覽器,手機APP,電視機等
  4. 儲存在快取伺服器中比如redis
  5. 可以自定義過期時間,讓快取失效
  6. 在使用者正在操作但是Token快過期時,自動重新生成一個新Token
  7. 而且相對來說比較安全,因為Token生成的值是由使用者名稱+使用者id+登入時間+隨機數生成

Token的由來

我們都是知道HTTP協議是無狀態的,這種無狀態意味著程式需要驗證每一次請求,從而辨別客戶端的身份。在這之前,程式都是通過在服務端儲存的登入資訊來辨別請求的。這種方式一般都是通過儲存Session來完成。隨著Web,應用程式,已經移動端的興起,這種驗證的方式逐漸暴露出了問題。尤其是在可擴充套件性方面。

Session 與 Token 的區別

token和session其實都是為了身份驗證,session一般翻譯為會話,而token更多的時候是翻譯為令牌。
session伺服器會儲存一份,可能儲存到快取,檔案,資料庫;同樣,session和token都是有過期時間一說,都需要去管理過期時間。
其實token與session的問題是一種時間與空間的博弈問題,session是空間換時間,而token是時間換空間。兩者的選擇要看具體情況而定。

session是一個在單個操作人 員整個操作過程中,與伺服器端保持通訊的惟一識別資訊。在同操作人員的多次請求當中,session始終保證是同一個物件,而不是多個物件,因為可以對其加鎖。當同一操作人員多個請求進入時,可以通過session限制只能單向通行。
本文正是通過使用session以及在session中加入token來驗證同一 個操作人員是否進行了併發重複的請求,在後一個請求到來時 ,使用session中的token驗證請求中的token是否致,當不一致時 ,被認為是重複提交,將不准許通過。

使用方式

Token的生成:
在這裡插入圖片描述

Token的置換方法:
在這裡插入圖片描述

在這裡插入圖片描述

總結:以上是個人對Token的一些見解,如有不對的地方還請指正,我會及時修改,一起討論,學習。