phptoken如何生成?关于PHP中token的生成的解析
内容导读
收集整理的这篇技术教程文章主要介绍了phptoken如何生成?关于PHP中token的生成的解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1836字,纯文字阅读大概需要3分钟。
内容图文
这篇文章给大家分享的内容是关于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
这下没有 = 号了, 舒服了些, 但是又太长了, 微信的 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;
执行结果: 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的生成的解析的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的phptoken如何生成?关于PHP中token的生成的解析全部内容,希望文章能够帮你解决phptoken如何生成?关于PHP中token的生成的解析所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。