token 的生成雜談

2021-09-13 12:49:39 字數 1520 閱讀 5058

很多時候我們需要用 token 來作為一些標識, 比如: 乙個使用者登入後的認證標識.

$v = 1; // 自己定義的 需要hash 的value 值

$key = mt_rand(); // 這裡用 隨機串作為key

$hash = md5($key . $v . mt_rand() . time());

echo $hash;

執行結果:b63426a38f86b726ce0d327d48e47376看著不是很舒服, 作為強迫症的我 是受不了的.

$v = 1;

$key = mt_rand();

$hash = md5($key . $v . mt_rand() . time());

$token = base64_encode($hash);

echo $token;

優化

$v = 1;

$key = mt_rand();

$hash = md5($key . $v . mt_rand() . time());

$token = str_replace('=', '', base64_encode($hash));

echo $token;

換種 hash 試試
$v = 1;

$key = mt_rand();

$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);

$token = str_replace('=', '', base64_encode($hash));

echo $token;

執行結果:7pn0pwzo+/tooisntdaewa4cyuxw是短些了, 可是裡面有 +/ 號, 很多情況下用 get 傳遞時會被 urlcode, urlcode 過後就這樣了7pn0pwzo%2b%2ftooisntdaewa4cyuxw, 這顯然不是我們想要的

繼續優化
$v = 1;

$key = mt_rand();

$hash = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);

$token = str_replace('=', '', strtr(base64_encode($hash), '+/', '-_'));

echo $token;

執行結果:jm9aky7sairorj7fhjiu2apbmsi這下不會 urlcode了, 看著也舒服些了, 我目前是這樣用的...

目前沒發現什麼更好的方案, 只是說出了我認為的比較好的方案

vue-cli3.0 + element ui + thinkphp5.1 + rbac許可權 + 響應式的後台管理系統

什麼是token及怎樣生成token

token是服務端生成的一串字串,以作客戶端進行請求的令牌,當第一次登陸後,伺服器生成乙個token便將此token返回給客戶端,以後客戶端只要帶上這個token前來請求資料即可,無需再次帶上使用者名稱和密碼 基於token的身份驗證 token的優勢 1.無狀態.可擴充套件 在客戶端儲存的toke...

jwt 生成token方法

author marte date 2019 04 23 10 37 03 last modified by marte last modified time 2019 04 23 10 58 23 單例 一次請求中所有出現使用jwt的地方都是乙個使用者 class jwtelse 驗證token是...

本地生成七牛token

由於某些原因 有時候需要本地生成token 原文 位址 首先我們需要用到三個引數scope accesskey和secretkey scope其實就是資源存放的資料夾名字,例如下圖的cmxj accesskey和secretkey在個人面板 個人中心 金鑰管理裡面就能看到 接下來就可以建立token...