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

2022-05-19 12:31:44 字數 1972 閱讀 7536

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

client端

import requests

token = "dnsjabdjsabdnjsabdnjsabjdsbajhdbsa"

###### 1.第一種,對稱加密

# res = requests.get('', headers=)

# print(res.text)

###### 2.第二種,不對稱加密

import time

ctime = time.time()

tmp = "%s|%s" % (token, ctime)

import hashlib

m = hashlib.md5()

m.update(bytes(tmp, encoding='utf8'))

res = m.hexdigest()

client_token = "%s|%s" % (res, ctime)

print(client_token)

res = requests.get('', headers=)

print(res.text)

server端

#三層驗證,保證安全性

#### 連線資料庫, 獲取儲存的主機名

token = 'dnsjabdjsabdnjsabdnjsabjdsbajhdbsa'

#meta裡面是http的一些請求頭資訊

# return httpresponse('非法的請求!')

#第一關,設定有效時間

server_time = time.time()

if float(server_time) - float(ctime) > 20:

return httpresponse('第一關:key過期')

#第二關,校驗token值

tmp = "%s|%s" % (token, ctime)

import hashlib

m = hashlib.md5()

m.update(bytes(tmp, encoding='utf8'))

server_token = m.hexdigest()

if server_token != client_token:

return httpresponse('第二關:非法的請求!')

### 第三關,token只能使用一次,並設定過期時間,防止資料堆積

### decode_responses=true可以使從redis得到的資料不是bytes型別

### django連線redis, 將key發到redis中, 並設定過期時間

r = redis.redis(host='127.0.0.1', port=6379, db=1,decode_responses=true)

#實現方法,就是這麼簡單

if ctime==r.get(client_token):

return httpresponse('第三關 已經訪問過了')

r.setex(client_token,20,ctime)

return httpresponse('重要的資料')

Redis客戶端和伺服器

一 redis客戶端 redisserver結構中儲存了所有客戶端的狀態資訊。struct redisserver 命令client list可以列出目前所有連線到伺服器的客戶端。命令client setname name 可以給客戶端設定乙個名字。偽客戶端 由於伺服器必須接收來自客戶端的命令以執行...

Redis 客戶端和伺服器

客戶端的資料結構 typedef struct redisclient redisclient 名字 name 標誌值 flags 指向客戶端正在使用的資料庫的指標,以及該資料庫的號碼 當前要執行的命令 命令的引數 命令的個數,以及指向命令實現函式的指標 輸入緩衝區 querybuf 輸出緩衝區 複...

客戶端通過WebService實現和服務端書互動

webservice作為 一種服務,它不需要客戶端提供額外的軟體支援,只要客戶端支援 協議和xml 這樣兩個特性就可以了。對 webservice 自身來講,它本身就是一種自我描述型的設計,所以服務端和客戶端可以通過它來響應和處理請求的內容及格式。xml是一種平台無關 語言無關的文件結構,因此 we...