通过JavaScript AJAX向PHP发送密码的正确方法是什么?

时间:2017-05-30 03:28:30

标签: javascript php ajax

我尝试了一些方法,我已经确认它是一个特殊的字符问题,即。我尝试了一个简单的密码组合,只包含字母/数字,并且有效。

由于我停止使用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';

这很好。

1 个答案:

答案 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'];

这正确地保留了任意“特殊”字符。