>  기사  >  백엔드 개발  >  PHP 토큰을 생성하는 방법은 무엇입니까? PHP의 토큰 생성 분석

PHP 토큰을 생성하는 방법은 무엇입니까? PHP의 토큰 생성 분석

不言
不言원래의
2018-07-23 10:22:496918검색

이 글에서 공유한 내용은 PHP의 토큰 생성 분석에 관한 내용으로, 도움이 필요한 친구들이 참고할 수 있습니다.

PHP 토큰을 생성하는 방법은 무엇입니까? PHP의 토큰 생성 분석

Background

사용자 로그인 후 인증 식별자와 같은 일부 식별자로 토큰을 사용해야 하는 경우가 많습니다.

구현 방법

md5:

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

실행 결과: b63426a38f86b726ce0d327d48e47376 별로 편해 보이지는 않습니다. , 억지로 참을 수가 없네요 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

md5 + base64 method

rrreee실행 결과: MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU= 좀 더 편해 보이네요. , 하지만 충분하지 않습니다. 반면 WeChat의 openid에는 일반적으로 끝에 = 기호가 없습니다. /code> 이제 = 기호가 없어 더 편해지지만 너무 깁니다. WeChat의 openid는 그리 길지 않습니다
다른 해시 방법을 사용해 보세요

sha1 + base64 방법 #🎜🎜 #rrreee

실행 결과: 7pn0pWzO+/TOoISNtDaewa4CyuXw는 더 짧지만, get에 의해 전달되면 +/ 기호가 있는 경우가 많습니다. , 다음과 같을 것입니다 7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw, 이것은 확실히 우리가 원하는 것이 아닙니다

계속 최적화
rrreee

실행 결과: JM9AkY7SAIROrJ7fhjIU2ApbMsI 이번에는 이런 일이 발생하지 않을 것입니다. urlcode를 사용하면 더 편해 보입니다...

하지만 이것이 최선의 해결책일까요?#🎜 🎜##🎜 🎜#지금까지 더 나은 솔루션을 찾지 못했습니다. 단지 제가 더 나은 솔루션이라고 생각하는 것을 언급했을 뿐입니다

관련 권장 사항:

php 큐 처리: php 메시지 큐 구현 원리(그림 및 텍스트)

#🎜🎜##🎜🎜##🎜🎜##🎜🎜#PHP에서 추상 클래스와 추상 메소드를 이해하는 방법은 무엇입니까? (코드 포함) #🎜🎜##🎜🎜#

위 내용은 PHP 토큰을 생성하는 방법은 무엇입니까? PHP의 토큰 생성 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.