【发布时间】:2017-05-30 03:28:29
【问题描述】:
我尝试了几种方法,我已经确认这是一个特殊字符问题,即。我尝试了一个简单的密码组合,只包含字母/数字并且有效。
自从我停止使用 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 的原因是降低文件下载速度-使用异步标签。
编辑:
哈希的奇怪之处:
我只需要一个基本的登录系统,所以我没有使用注册表单,我创建了一个使用 password_hash 的散列函数并将其插入到数据库中。我注意到使用
$pass = "password with special chars";
会失败,错误会说字符串中的某些内容是未定义的变量(字符串被剪切,我猜是解析错误)。
但是使用
$pass = 'password with special chars';
这很好。
【问题讨论】:
-
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… "请注意,encodeURI 本身不能形成正确的 HTTP GET 和 POST 请求,例如 XMLHTTPRequests,因为“&”、“+”和“=”没有被编码,它们是在 GET 和 POST 请求中被视为特殊字符。但是,encodeURIComponent 确实对这些字符进行了编码。"
-
旁注:这是不使用 jQuery 的奇怪原因。你可以使用另一个更小的库,比如 Axios - 自己创建 XMLHTTPRequests 是很愚蠢的。
-
我也试过了,encodeURIComponent,谢谢你的链接,我会检查的。还有一个问题是我是否在 PHP 端使用 urldecode 来处理这两种情况。我认为不是第一种情况(使用 urlencode)。
-
我知道这可能看起来很奇怪,但我们的应用程序部署在网络速度为 0.5Mbps 或更低的地方。 1KB 的文件几乎需要一秒钟的时间来下载。由于我习惯于使用 jQuery,因此出现了一些问题
标签: javascript php ajax