Android客戶端和服務端如何使用Token和Session

    對於初學者來講,對Token和Session的使用不免會限於困境,開發過程當中知道有這個東西,但殊不知道爲何要用他?更不知道其原理,今天我就帶你們一塊兒分析分析這東西。數據庫

    1、咱們先解釋一下他的含義:服務器

    一、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並做出相應提示,在這樣的背景下,Token便應運而生。網絡

    二、Token的定義:Token是服務端生成的一串字符串,以做客戶端進行請求的一個令牌,當第一次登陸後,服務器生成一個Token便將此Token返回給客戶端,之後客戶端只需帶上這個Token前來請求數據便可,無需再次帶上用戶名和密碼。session

    三、使用Token的目的:Token的目的是爲了減輕服務器的壓力,減小頻繁的查詢數據庫,使服務器更加健壯。併發

    瞭解了Token的意義後,咱們就更明確的知道爲何要用他了。ide

    2、如何使用Token?學習

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

    一、用設備號/設備mac地址做爲Token(推薦)blog

    客戶端:客戶端在登陸的時候獲取設備的設備號/mac地址,並將其做爲參數傳遞到服務端。token

    服務端:服務端接收到該參數後,便用一個變量來接收同時將其做爲Token保存在數據庫,並將該Token設置到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和服務器端session中的token進行對比,若是相同則放行,不一樣則拒絕。

    分析:此刻客戶端和服務器端就統一了一個惟一的標識Token,並且保證了每個設備擁有了一個惟一的會話。該方法的缺點是客戶端須要帶設備號/mac地址做爲參數傳遞,並且服務器端還須要保存;優勢是客戶端不需從新登陸,只要登陸一次之後一直可使用,至於超時的問題是有服務器這邊來處理,如何處理?若服務器的Token超時後,服務器只需將客戶端傳遞的Token向數據庫中查詢,同時並賦值給變量Token,如此,Token的超時又從新計時

    二、用session值做爲Token

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

    客戶端:客戶端接收到用戶名和密碼後並判斷,若是正確了就將本地獲取sessionID做爲Token返回給客戶端,客戶端之後只需帶上請求數據便可。

    分析:這種方式使用的好處是方便,不用存儲數據,可是缺點就是當session過時後,客戶端必須從新登陸才能進行訪問數據

    3、使用過程當中出現的問題以及解決方案?

    剛纔咱們輕鬆介紹了Token的兩種使用方式,可是在使用過程當中咱們還出現各類問題,Token第一種方法中咱們隱藏了一個在網絡很差或者併發請求時會致使屢次重複提交數據的問題。

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

wKioL1QX85nCkJ5qAABWcdNyC0g731.png

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

     總結:以上是我的對開發中使用Token和session的一點總結,若有敘述不當之處請指正,我將及時改正並感謝,我知道還有更多更好的使用方式,我在這裏只是拋磚引玉,但願你們將您的使用方式提出來,咱們一塊兒討論,學習,一塊兒進步,同時也爲像我同樣對這方面理解薄弱的朋友提供點幫助,謝謝。

相關文章
相關標籤/搜索