Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ajax/JQuery检查用户类型的原始密码_Javascript_Ajax_Jquery - Fatal编程技术网

Javascript 使用Ajax/JQuery检查用户类型的原始密码

Javascript 使用Ajax/JQuery检查用户类型的原始密码,javascript,ajax,jquery,Javascript,Ajax,Jquery,我希望允许用户在“更改密码”页面上键入其原始密码,并在不刷新的情况下让该页面检查其是否正确。当密码正确时,我想在文本框旁边显示一个复选框图像 不过,我有两个问题。1) 如何以安全的方式实现这一点,2)用每个按键启动ajax调用似乎并不总能捕获每个按键 这就是我到目前为止所做的: $("#oldPW").keyup(function () { checkPW(); }); // on keyup function checkPW() { var pw = $("#oldPW").

我希望允许用户在“更改密码”页面上键入其原始密码,并在不刷新的情况下让该页面检查其是否正确。当密码正确时,我想在文本框旁边显示一个复选框图像

不过,我有两个问题。1) 如何以安全的方式实现这一点,2)用每个按键启动ajax调用似乎并不总能捕获每个按键

这就是我到目前为止所做的:

$("#oldPW").keyup(function () {
    checkPW();
});

// on keyup
function checkPW() {
    var pw = $("#oldPW").val();
    var dataSring = "pw=" + pw;
    $.ajax({
        type: "POST",
        url: "checkPW",
        data: dataSring,
        cache: false,
        success: function (data) {
            if (data== "True") {
                $("#pwok").fadeIn();
            }
            if (data== "false") {
                $("#pwok").fadeOut();
            }
        }
    });
}
我发现上面代码的问题是用户可以手动显示图像,这将绕过上面的“安全性”。我可以在用户按submit后再次检查,但这并不能解决问题1,缺少密钥,而且我也不确定它在安全性方面是否是万无一失的。

对于问题1,您需要在服务器端验证密码。这样,您就不必担心有人绕过客户端

至于#2,问题是您不知道ajax调用将以什么顺序完成,因此前一个调用可能在最近一个调用之后完成。您可以通过多种方式处理此问题,但其中一种方法是在每次重试时中止请求:

$("#oldPW").data('lastRequest', {abort: function () {}});

function checkPW() {
    var pw = $("#oldPW").val();
    var dataSring = "pw=" + pw;
    $("#oldPW").data('lastRequest').abort();
    $("#oldPW").data('lastRequest', $.ajax({
对于问题1,您需要在服务器端验证密码。这样,您就不必担心有人绕过客户端

至于#2,问题是您不知道ajax调用将以什么顺序完成,因此前一个调用可能在最近一个调用之后完成。您可以通过多种方式处理此问题,但其中一种方法是在每次重试时中止请求:

$("#oldPW").data('lastRequest', {abort: function () {}});

function checkPW() {
    var pw = $("#oldPW").val();
    var dataSring = "pw=" + pw;
    $("#oldPW").data('lastRequest').abort();
    $("#oldPW").data('lastRequest', $.ajax({

这似乎真的浪费了资源,而实际效益却微乎其微。我也不确定用户显示图像有什么害处——当然图像本身并没有授予他们任何特定的特权。您可能还需要小心,以防在发生一定数量的故障后后端将用户锁定在外。具有长密码的用户将永远无法登录。您可以在“blur”上进行登录,或者让按键启动一个超时,在提交之前等待1500毫秒,并清除之前启动的超时,如WID,这可能会解决按键问题。我还担心用户能够在代码中伪造身份验证。我不知道如何避免。有可能以安全的方式进行吗?只是检查一下。tvanfosson,谢谢,我会按照你说的检查失败尝试的次数。这是个好主意。这似乎真的浪费了资源,但实际效益却微乎其微。我也不确定用户显示图像有什么害处——当然图像本身并没有授予他们任何特定的特权。您可能还需要小心,以防在发生一定数量的故障后后端将用户锁定在外。具有长密码的用户将永远无法登录。您可以在“blur”上进行登录,或者让按键启动一个超时,在提交之前等待1500毫秒,并清除之前启动的超时,如WID,这可能会解决按键问题。我还担心用户能够在代码中伪造身份验证。我不知道如何避免。有可能以安全的方式进行吗?只是检查一下。tvanfosson,谢谢,我会按照你说的检查失败尝试的次数。好主意,谢谢你的密码。你认为keyup是最好的事件,还是我应该像Likwid建议的那样使用blur?@Dave使用
blur
的唯一一点是它需要你。。变得模糊不清你可以在他们点击“提交”按钮或其他什么按钮时触发它,但当用户输入时,页面会立即做出响应,这有一定的吸引力。缺少关键点是我的另一个项目中的一个问题,人们喜欢即时反馈。但我没有尝试中止方法。我已经读过了,但这是我看到的第一个示例代码。谢谢你的代码。你认为keyup是最好的事件,还是我应该像Likwid建议的那样使用blur?@Dave使用
blur
的唯一一点是它需要你。。变得模糊不清你可以在他们点击“提交”按钮或其他什么按钮时触发它,但当用户输入时,页面会立即做出响应,这有一定的吸引力。缺少关键点是我的另一个项目中的一个问题,人们喜欢即时反馈。但我没有尝试中止方法。我读过,但这是我看到的第一个示例代码。