首頁  >  文章  >  後端開發  >  php token如何產生?關於PHP中token的生成的解析

php token如何產生?關於PHP中token的生成的解析

不言
不言原創
2018-07-23 10:22:496918瀏覽

這篇文章要跟大家分享的內容是關於PHP中token的生成的解析,有一定的參考價值,有需要的朋友可以參考一下。

php token如何產生?關於PHP中token的生成的解析

背景

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

實現方式

md5 的方式:

$v = 1; // 自己定义的 需要hash 的value 值
$key = mt_rand(); // 这里用 随机串作为key
$hash = md5($key . $v . mt_rand() . time());
echo $hash;

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

md5 base64 的方式

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = base64_encode($hash);
echo $token;
執行結果: MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU= 看著稍微舒服了,還不夠好, 反觀微信的openid , 編號

##優化

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = str_replace('=', '', base64_encode($hash));
echo $token;

執行結果: Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTM 這下沒有= 號了, 舒服了些可

#換種hash 試試
sha1 base64 的方式

$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+/TOoISNtDaewa4CyuXw, 這顯然不是我們想要的

繼續優化
$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了, 看著也舒服些了, 我目前是這樣用的...

#但是這是不是最優方案呢?

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

相關推薦:

php佇列處理:php訊息佇列實作原理(圖文)

如何理解PHP中抽象類別與抽象方法? (附程式碼)

以上是php token如何產生?關於PHP中token的生成的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn