一、 什么是token?
1、為什么需要Token:Token是在客戶端頻繁向服務端請求數據,但是請求數據之前,必需進行用戶信息驗證(用戶名和密碼),也就導致客戶端每次向服務器端請求數據的時候,服務器端都要去數據庫查詢用戶名和密碼並進行對比,
判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。
2、Token的定義:Token是服務端自動生成的一串字符串,可以作為客戶端向服務器端進行請求時候的一個通行令牌,在用戶當第一次登錄后,服務器端就會生成一個Token令牌便將此Token令牌返回給客戶端,客戶端把Token令牌
保存下來,以后客戶端再向服務器端發送請求,只需帶上這個Token令牌向服務器端請求數據即可,無需再次帶上用戶名和密碼。
3、Token解決的問題:使用Token的目的是為了減輕服務器端的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。
二、如何使用Token?
1、用設備號/設備mac地址作為Token(推薦)
客戶端:客戶端在登錄的時候獲取設備的設備號/mac地址(因為這兩個值是唯一的),並將其作為參數傳遞到服務端。
服務端:服務端接收到該參數后,便用一個變量來接收同時將其作為Token保存在數據庫,並將該Token設置到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和服務器端session中的token進行對比,如果相
同則放行,不同則拒絕。
分析:此刻客戶端和服務器端就統一了一個唯一的標識Token,而且保證了每一個設備擁有了一個唯一的會話(session)。該方法的缺點是客戶端需要帶設備號/mac地址作為參數傳遞,而且服務器端還需要保存;優點是客戶端不需重新
登錄,只要登錄一次,以后再次登陸使用token就可以了,至於超時的問題會有服務器這邊來處理,會如何處理?若服務器的Token超時后,服務器只需將客戶端傳遞的Token向數據庫中查詢,同時並賦值給變量Token,如此,
Token的超時又重新計時。
2、用session值作為Token
客戶端:客戶端只需攜帶用戶名和密碼登陸即可。
客戶端:客戶端接收到用戶名和密碼后並判斷,如果正確了就將本地獲取sessionID作為Token返回給客戶端,客戶端以后只需帶上請求數據即可。
分析:這種方式使用的好處是方便,不用存儲數據,但是缺點就是當session過期后,客戶端必須重新登錄才能進行訪問數據。