最近專案中有用到token和session,但是我對此不是很理解,所以特地整理下學習筆記,已便自己檢視,也可以幫助到更多跟我一樣有疑惑者。
一、我們先解釋一下他的含義:
1、token的引入:token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,token便應運而生。
2、token的定義:token是服務端生成的一串字串,以作客戶端進行請求的乙個令牌,當第一次登入後,伺服器生成乙個token便將此token返回給客戶端,以後客戶端只需帶上這個token前來請求資料即可,無需再次帶上使用者名稱和密碼。
3、使用token的目的:token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。
了解了token的意義後,我們就更明確的知道為什麼要用他了。
二、如何使用token?
這是本文的重點,在這裡我就介紹常用的兩種方式。
服務端:服務端接收到該引數後,便用乙個變數來接收同時將其作為token儲存在資料庫,並將該token設定到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和伺服器端session中的token進行對比,如果相同則放行,不同則拒絕。
分析:此刻客戶端和伺服器端就統一了乙個唯一的標識token,而且保證了每乙個裝置擁有了乙個唯一的會話。該方法的缺點是客戶端需要帶裝置號/mac位址作為引數傳遞,而且伺服器端還需要儲存;優點是客戶端不需重新登入,只要登入一次以後一直可以使用,至於超時的問題是有伺服器這邊來處理,如何處理?若伺服器的token超時後,伺服器只需將客戶端傳遞的token向資料庫中查詢,同時並賦值給變數token,如此,token的超時又重新計時。
2、用session值作為token
客戶端:客戶端只需攜帶使用者名稱和密碼登陸即可。
服務端:服務端接收到使用者名稱和密碼後並判斷,如果正確了就將sessionid作為token返回給客戶端,客戶端以後只需帶上sessionid請求資料即可。
分析:這種方式使用的好處是方便,不用儲存資料,但是缺點就是當session過期後,客戶端必須重新登入才能進行訪問資料。
三、使用過程**現的問題以及解決方案?
剛才我們輕鬆介紹了token的兩種使用方式,但是在使用過程中我們還出現各種問題,token第一種方法中我們隱藏了乙個在網路不好或者併發請求時會導致多次重複提交資料的問題。該問題的解決方案:將session和token套用,如此便可解決,如何套用呢?請看如下解釋:
session是乙個在單個操作人員整個操作過程中,與伺服器端保持通訊的唯一識別資訊。在同一操作人員的多次請求中,session始終保證是同乙個物件,而不是多個物件,因為可以對其加鎖。當同一操作人員多個請求進入時,可以通過session限制只能單向通行。通過使用session以及在session中加入token,來驗證同乙個操作人員是否進行了併發重複的請求,在後乙個請求到來時,使用session中的token驗證請求中的token是否一致,當不一致時,被認為是重複提交,將不准許通過。
token和session的區別
1.為什麼要有session的出現?答 是由於網路中http協議造成的,因為http本身是無狀態協議,這樣,無法確定你的本次請求和上次請求是不是你傳送的。如果要進行類似論壇登陸相關的操作,就實現不了了。2.session生成方式?答 瀏覽器第一次訪問伺服器,伺服器會建立乙個session,然後同時為...
session 和token 的區別
目錄 一 session的狀態保持及弊端 二 token認證機制 當使用者第一次通過瀏覽器使用使用者名稱和密碼訪問伺服器時,伺服器會驗證使用者資料,驗證成功後在伺服器端寫入session資料,向客戶端瀏覽器返回sessionid,瀏覽器將sessionid儲存在cookie中,當使用者再次訪問伺服器...
token和session的區別
session和token都是用來保持會話,功能相同 不同的使用者訪問服務端的時候會在session物件中儲存鍵值對,鍵 用來儲存開啟這個使用者資訊的 鑰匙 在登入成功後,鑰匙 通過cookie返回給客戶端,客戶端儲存為sessionid記錄在cookie中。當客戶端再次訪問時,會預設攜帶cooki...