Token:在計算機身份認證中是令牌(臨時)的意思,類似於 MD5 加密之后的長字符串
特點:1.隨機性,不可預測 2.具有有限期 3.唯一
作用:1.防止重復提交 2.防止CSRF(跨站請求偽造)攻擊
Token是服務器生成的一串字符串,以作客戶端進行請求的一個令牌。
當第一次登錄后,服務器生成一個Token並返回給客戶端,以后客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。
目的就是為了驗證用戶登錄情況以及減輕服務器的壓力,減少頻繁的查詢數據庫。
它的應用:
1.當用戶首次登錄成功之后,服務器就會生成一個token值(UUID);
2.服務器會保存這個值(保存在數據庫中或者緩存中),再將這個token值返回給客戶端;
3.客戶端拿到token值之后,使用sp進行保存。
4.以后客戶端再次發送網絡請求(一般不是登錄請求)的時候,就會將這個token值附帶到參數中發送給服務器;
5.服務器接收到客戶端的請求之后,會取出token值與保存在本地(數據庫)中的token值做比較。如果兩個token值相同,說明用戶登錄成功過,當前用戶處於登錄狀態,如果沒有這個token值,沒有登錄成功。
代碼僅供參考:
生成Token
$key = "APP_TOKEN_" . 122;
$val = md5("TOKEN_" . 122 . "_" . time()); // 32 JHJKbjkBJKGHGHGHSSS
$exptime = 86400*30;
$this->redis->setex($key, $exptime, $val);//有效期 30天
驗證Token
$key = "APP_TOKEN_" .122;
if ( !$this->redis->exists($key) ) {
return false;
}
$user_token = $this->redis->get($key);
if ( empty($user_token) ) {
return false;
}
if ($token != $user_token) {
return false;
}
