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

不言
发布: 2018-07-23 10:22:49
原创
7180人浏览过

这篇文章给大家分享的内容是关于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 , 一般是不会有后面的 = 号的

优化

立即学习PHP免费学习笔记(深入)”;

$v = 1;
$key = mt_rand();
$hash = md5($key . $v . mt_rand() . time());
$token = str_replace('=', '', base64_encode($hash));
echo $token;
登录后复制

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

uBrand Logo生成器
uBrand Logo生成器

uBrand Logo生成器是一款强大的AI智能LOGO设计工具。

uBrand Logo生成器 57
查看详情 uBrand Logo生成器
换种 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%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了, 看着也舒服些了, 我目前是这样用的...

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

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

相关推荐:

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

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

以上就是php token如何生成?关于PHP中token的生成的解析的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号