Rumah > pembangunan bahagian belakang > tutorial php > php token如何生成?关于PHP中token的生成的解析

php token如何生成?关于PHP中token的生成的解析

不言
Lepaskan: 2023-04-03 10:40:02
asal
7145 orang telah melayarinya

这篇文章给大家分享的内容是关于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;
Salin selepas log masuk

执行结果: b63426a38f86b726ce0d327d48e47376 看着不是很舒服, 作为强迫症的我 是受不了的.

md5 + base64 的方式

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = base64_encode($hash);
echo $token;
Salin selepas log masuk

执行结果: MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU= 看着稍微舒服些了, 但是还不够好, 反观微信的 openid , 一般是不会有后面的 = 号的

优化

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

执行结果: Yzg4MWU0OTQ0MTRiZTI0YWYwMDJjOTYyODBkNjFmMTM 这下没有 = 号了, 舒服了些, 但是又太长了, 微信的 openid 可没这么长

换种 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;
Salin selepas log masuk

执行结果: 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;
Salin selepas log masuk

执行结果: JM9AkY7SAIROrJ7fhjIU2ApbMsI 这下不会 urlcode了, 看着也舒服些了, 我目前是这样用的...

但是这是不是最优方案呢?

目前没发现什么更好的方案, 只是说出了我认为的比较好的方案

相关推荐:

php队列处理:php消息队列实现原理(图文)

如何理解PHP中抽象类和抽象方法?(附代码)

Atas ialah kandungan terperinci php token如何生成?关于PHP中token的生成的解析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan