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

2021-09-07 11:20:16 字數 1715 閱讀 4212

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

1、token的引入:token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,token便應運而生。

2、token的定義:token是服務端生成的一串字串,以作客戶端進行請求的乙個令牌,當第一次登入後,伺服器生成乙個token便將此token返回給客戶端,以後客戶端只需帶上這個token前來請求資料即可,無需再次帶上使用者名稱和密碼。

3、使用token的目的:token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。

二、如何使用token?

1、用裝置號/裝置mac位址作為token(推薦)

服務端:服務端接收到該引數後,便用乙個變數來接收同時將其作為token儲存在資料庫,並將該token設定到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和伺服器端session中的token進行對比,如果相同則放行,不同則拒絕。

分析:此刻客戶端和伺服器端就統一了乙個唯一的標識token,而且保證了每乙個裝置擁有了乙個唯一的會話。該方法的缺點是客戶端需要帶裝置號/mac位址作為引數傳遞,而且伺服器端還需要儲存;優點是客戶端不需重新登入,只要登入一次以後一直可以使用,至於超時的問題是有伺服器這邊來處理,如何處理?若伺服器的token超時後,伺服器只需將客戶端傳遞的token向資料庫中查詢,同時並賦值給變數token,如此,token的超時又重新計時。

2、用session值作為token

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

客戶端:客戶端接收到使用者名稱和密碼後並判斷,如果正確了就將本地獲取sessionid作為token返回給客戶端,客戶端以後只需帶上請求資料即可。

分析:這種方式使用的好處是方便,不用儲存資料,但是缺點就是當session過期後,客戶端必須重新登入才能進行訪問資料。

三、使用過程**現的問題以及解決方案?

剛才我們輕鬆介紹了token的兩種使用方式,但是在使用過程中我們還出現各種問題,token第一種方法中我們隱藏了乙個在網路不好或者併發請求時會導致多次重複提交資料的問題。

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

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

/**

* 使用者登入,將私有token儲存

* * @param username

* @param password

* @return gitlabuser使用者資訊

// 儲存使用者的私有token

if (session != null && session.get_privatetoken() != null)

return session;

}

使用redis實現客戶端和服務端token驗證

實在是思維江化啊,沒有想到可以給redis設定不同的key值來實現不同key值儲存不同的value值,而一直想著給乙個名為token的key值新增不同的資料,並設定過期時間,然而這樣卻不能新增只能做到覆蓋,因此糾結了好一會。狠狠抽自己一巴掌 client端 import requests token...

socket(C )客戶端和服務端

define winsock deprecated no warnings include include define port 5150 define msgsize 1024 pragma comment lib,ws2 32.lib void main system pause includ...

客戶端和服務端路徑問題

客戶端和服務端路徑問題 1.客戶端路徑和伺服器端路徑 客戶端路徑需要給出應用名稱,例如 day05 1 aservlet 伺服器端路徑無需給出應用名稱,例如 aservlet 2.客戶端路徑 1 頁面中都是客戶端路徑 超連結的href 表單的action 2 重定向也是客戶端路徑 response....