이 글에서 공유한 내용은 PHP의 토큰 생성 분석에 관한 내용으로, 도움이 필요한 친구들이 참고할 수 있습니다.
사용자 로그인 후 인증 식별자와 같은 일부 식별자로 토큰을 사용해야 하는 경우가 많습니다.
$v = 1; // 自己定义的 需要hash 的value 值 $key = mt_rand(); // 这里用 随机串作为key $hash = md5($key . $v . mt_rand() . time()); echo $hash;
실행 결과: b63426a38f86b726ce0d327d48e47376
별로 편해 보이지는 않습니다. , 억지로 참을 수가 없네요 b63426a38f86b726ce0d327d48e47376
看着不是很舒服, 作为强迫症的我 是受不了的.
$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 试试
$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
MWQyMjE2NmI3NDA1MmRjZTQwOTQzZDZjMWU1OTE5OGU=
좀 더 편해 보이네요. , 하지만 충분하지 않습니다. 반면 WeChat의 openid에는 일반적으로 끝에 = 기호가 없습니다. /code> 이제 = 기호가 없어 더 편해지지만 너무 깁니다. WeChat의 openid는 그리 길지 않습니다다른 해시 방법을 사용해 보세요
실행 결과: 7pn0pWzO+/TOoISNtDaewa4CyuXw
는 더 짧지만, get에 의해 전달되면 +/ 기호가 있는 경우가 많습니다. , 다음과 같을 것입니다 7pn0pWzO%2b%2fTOoISNtDaewa4CyuXw
, 이것은 확실히 우리가 원하는 것이 아닙니다
계속 최적화rrreee
실행 결과: JM9AkY7SAIROrJ7fhjIU2ApbMsI
이번에는 이런 일이 발생하지 않을 것입니다. urlcode를 사용하면 더 편해 보입니다...
하지만 이것이 최선의 해결책일까요?#🎜 🎜##🎜 🎜#지금까지 더 나은 솔루션을 찾지 못했습니다. 단지 제가 더 나은 솔루션이라고 생각하는 것을 언급했을 뿐입니다
php 큐 처리: php 메시지 큐 구현 원리(그림 및 텍스트)
#🎜🎜##🎜🎜##🎜🎜##🎜🎜#PHP에서 추상 클래스와 추상 메소드를 이해하는 방법은 무엇입니까? (코드 포함) #🎜🎜##🎜🎜#위 내용은 PHP 토큰을 생성하는 방법은 무엇입니까? PHP의 토큰 생성 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!