我正在用PHP创建表单以重置用户密码。
当用户发送重置请求时,它将链接发送到重置密码邮件。
链接中是domain.com/index.php?link=reset-password&code=1_Xzpq+/F64xwZ/oQ/U4TkTQ==
1 = User_id
Xzpq .. =用户密码哈希值(咸)
我需要将UserID和PasswordHash分解为变量
我的代码:
function isValidPasswordResetToken($string) {
global $sqlConnect;
//$string_exp = explode('_', $string);
list($user_id, $password) = explode('_', $string);
//$user_id = $string_exp[0];
//$password = $string_exp[1];
if (empty($user_id) or !is_numeric($user_id) or $user_id < 1) {
return false;
}
if (empty($password)) {
return false;
}
$query = mysqli_query($sqlConnect, " SELECT COUNT(`user_id`) FROM " . USERS . " WHERE `user_id` = {$user_id} AND `password` = '{$password}' AND `active` = '1' ");
return (Sql_Result($query, 0) == 1) ? true : false;
}
它很好用,但是。。当PasswordHash像Xzpq+/F64xwZ/oQ/U4TkTQ==
(在Hash中是'+'字符)时,它就无法工作。
当PasswordHash为m7c7Tn67QpI2eI1jLdqOEg==
时,它可以正常工作。.
有机会以其他方式做到这一点,它将支持所有角色?还是我做错了什么?
谢谢您的回答。
答案 0 :(得分:5)
浏览器使用+
替换URL中的空格。
您只需要先对其进行编码,并在需要处理时对其进行解码即可。
<?php
$x = urlencode('Xzpq+/F64xwZ/oQ/U4TkTQ==');
echo $x . "\n";
echo urldecode($x);
输出:
Xzpq%2B%2FF64xwZ%2FoQ%2FU4TkTQ%3D%3D
Xzpq+/F64xwZ/oQ/U4TkTQ==