關(guān)于客戶端和服務(wù)端的Token和Session

對于初學者來說,對Token和Session的使用難免會限于困境,開發(fā)過程中知道有這個東西,但卻不知道為什么要用他?更不知道其原理,今天我就帶大家一起分析分析這東西。

一、我們先解釋一下他的含義:

1、Token的引入:Token是在客戶端頻繁向服務(wù)端請求數(shù)據(jù),服務(wù)端頻繁的去數(shù)據(jù)庫查詢用戶名和密碼并進行對比,判斷用戶名和密碼正確與否,并作出相應(yīng)提示,在這樣的背景下,Token便應(yīng)運而生。

2、Token的定義:Token是服務(wù)端生成的一串字符串,以作客戶端進行請求的一個令牌,當?shù)谝淮蔚卿浐螅?wù)器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。

3、使用Token的目的:Token的目的是為了減輕服務(wù)器的壓力,減少頻繁的查詢數(shù)據(jù)庫,使服務(wù)器更加健壯。

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

二、如何使用Token?

這是本文的重點,在這里我就介紹常用的兩種方式。

1、用設(shè)備號/設(shè)備mac地址作為Token(推薦)

客戶端:客戶端在登錄的時候獲取設(shè)備的設(shè)備號/mac地址,并將其作為參數(shù)傳遞到服務(wù)端。

服務(wù)端:服務(wù)端接收到該參數(shù)后,便用一個變量來接收同時將其作為Token保存在數(shù)據(jù)庫,并將該Token設(shè)置到session中,客戶端每次請求的時候都要統(tǒng)一攔截,并將客戶端傳遞的token和服務(wù)器端session中的token進行對比,如果相同則放行,不同則拒絕。

分析:此刻客戶端和服務(wù)器端就統(tǒng)一了一個唯一的標識Token,而且保證了每一個設(shè)備擁有了一個唯一的會話。該方法的缺點是客戶端需要帶設(shè)備號/mac地址作為參數(shù)傳遞,而且服務(wù)器端還需要保存;優(yōu)點是客戶端不需重新登錄,只要登錄一次以后一直可以使用,至于超時的問題是有服務(wù)器這邊來處理,如何處理?若服務(wù)器的Token超時后,服務(wù)器只需將客戶端傳遞的Token向數(shù)據(jù)庫中查詢,同時并賦值給變量Token,如此,Token的超時又重新計時。

2、用session值作為Token

客戶端:客戶端只需攜帶用戶名和密碼登陸即可。

客戶端:客戶端接收到用戶名和密碼后并判斷,如果正確了就將本地獲取sessionID作為Token返回給客戶端,客戶端以后只需帶上請求數(shù)據(jù)即可。

分析:這種方式使用的好處是方便,不用存儲數(shù)據(jù),但是缺點就是當session過期后,客戶端必須重新登錄才能進行訪問數(shù)據(jù)。

三、使用過程中出現(xiàn)的問題以及解決方案?

剛才我們輕松介紹了Token的兩種使用方式,但是在使用過程中我們還出現(xiàn)各種問題,Token第一種方法中我們隱藏了一個在網(wǎng)絡(luò)不好或者并發(fā)請求時會導致多次重復提交數(shù)據(jù)的問題。

該問題的解決方案:將session和Token套用,如此便可解決,如何套用呢?請看這段解釋:

這就是解決重復提交的方案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容