token和session兩種登陸方式的理解

2021-08-31 23:22:48 字數 1460 閱讀 8122

最近專案中有用到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是否一致,當不一致時,被認為是重複提交,將不准許通過。

hibernate兩種獲取session方法的區別

在hibernate中有兩種方法獲得session opensession getcurrentsession 如果使用的getcurrentsession 方法 就要在hibernate.cfg.xml檔案中進行配置 如果是本地事務 jdbc thread 如果是全域性事物 jta jta 兩種方...

cookie和session和token是什麼?

什麼是session?什麼是cookie?什麼是token?1 cookie?由於http是一種無狀態協議,伺服器沒有辦法單單從網路連線上面知道訪問者的身份,為了解決這個問題,就誕生了cookie cookie實際上是一小段的4k文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用re...

token和session的區別

1.為什麼要有session的出現?答 是由於網路中http協議造成的,因為http本身是無狀態協議,這樣,無法確定你的本次請求和上次請求是不是你傳送的。如果要進行類似論壇登陸相關的操作,就實現不了了。2.session生成方式?答 瀏覽器第一次訪問伺服器,伺服器會建立乙個session,然後同時為...