我尝试了一些方法,我已经确认它是一个特殊的字符问题,即。我尝试了一个简单的密码组合,只包含字母/数字,并且有效。
由于我停止使用jQuery,这是我第一次遇到password_verify不起作用的问题。我确实如上所述,确认password_verify没有任何问题。
所以我输入了密码,然后用这样的用户名加入:
var params = null,
paramObj = {};
paramObj['user'] = loginInpUser.value;
paramObj['pass'] = loginInpPass.value;
params = encodeURI('post_params='+JSON.stringify(paramObj));
在PHP方面,我在POST中收到了这样的内容:
$post_params = json_decode($_POST['post_params'], true);
$user = $post_params['user'];
$pass = $post_params['pass'];
我确实从我在客户端发送的内容中获得了匹配的值,即PHP获得的值。回显$ user和$ pass,它们完全匹配......所讨论的特殊字符是:
)(#$$%)(
我甚至没想过扔掉一个&在那里可能会导致在将参数与XMLHttpRequest发送之前连接参数的问题。
那么在正确解析特殊字符(password_verify与密码哈希匹配)的情况下,正确的方法是什么?
我有理由不使用jQuery来降低文件下载速度 - 使用异步标签。
编辑:
哈希的奇怪之处:</ p>
我只需要一个基本的登录系统,所以我没有打扰注册表单,我创建了一个使用password_hash并将其插入数据库的散列函数。我注意到使用
$pass = "password with special chars";
会失败,错误会说字符串中的内容是一个未定义的变量(字符串被删除,我猜解析错误)。
但是使用
$pass = 'password with special chars';
这很好。
答案 0 :(得分:0)
您应该将整个请求发送为JSON或URL编码;两者的混合相当奇怪:
var params = 'user=' + encodeURIComponent(loginInpUser.value) + '&pass=' + encodeURIComponent(loginInpPass.value);
$user = $_POST['user'];
$pass = $_POST['pass'];
或者:
var params = JSON.stringify({ user: loginInpUser.value, pass: loginInpPass.value })
$params = json_decode(file_get_contents('php://input'), true);
echo $params['user'], $params['pass'];
这正确地保留了任意“特殊”字符。