【问题标题】:Authentication using AJAX & PHP使用 AJAX 和 PHP 进行身份验证
【发布时间】:2013-03-08 22:14:26
【问题描述】:

我制作了一个简单的程序来模拟使用 AJAX 和 PHP 的身份验证。以下是我的代码。它将重定向到“/?”但什么也没发生。我尝试在onclick 事件中使用checkLogin(); return false;,但没有成功。

index.php

<script type="text/javascript" src="validation.js"></script>
<form>
    <p>
        <label>Username <abbr title="Required">*</abbr></label>
        <input id="usernamelogin" type="text" value="" />
    </p>
    <p>
        <label>Password <abbr title="Required">*</abbr></label>
        <input id="passwordlogin" type="text" value="" />
    </p>                
    <p>
        <input id="login" type="submit" value="Login" onclick="checkLogin()" />
    </p>
</form>

validation.js

function checkLogin(){
    var u = document.getElementById("usernamelogin").value;
    var p = document.getElementById("passwordlogin").value;

    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }
    else{
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onReadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            if(xmlhttp.responseText == u){
                alert(':)');
            }
            else{
                alert(':(');
            }
        }
    }

    xmlhttp.open("GET", "login.php?u=" + u + "&p=" + p, true);
    xmlhttp.send(); 
}

login.php

<?php
    $u = $_GET['u'];
    $p = $_GET['p'];

    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db = 'db';

    $con = mysql_connect($host, $user, $pass);
    if(!$con) die("Could not connect: " . mysql_error());

    mysql_select_db($db, $con);
    $query = "select username from login where username = '" . $u . "' and password = '" . $p . "'";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    echo $row['username'];
    mysql_close($con);
?>

【问题讨论】:

  • 为什么不使用/login.php 来确保它会对独立于当前 URL 的相同 URL 执行请求。您还可以检查是否使用 Chrome 或 Firebug for Firefox 的开发者工具执行了任何 XHR 请求?
  • 如果你喜欢,我有建议 1) mysql_* 被贬低 2) 这种认证方法很弱!
  • 不是您问题的答案,但您没有清理您的数据库输入,这是非常危险的。生产肯定不安全。
  • @HaralanDobrev 我试过/login.php 但没有用。我正在检查 XHR 请求。
  • @HaralanDobrev 感谢您的帮助,它的状态是 200。原来它必须是 onreadystatechange 而不是 onReadystatechange。逆天。我在 Notepad++ 中使用自动完成功能。

标签: php mysql ajax


【解决方案1】:

我更改以下代码

xmlhttp.onReadystatechange

xmlhttp.onreadystatechange

它有效。并且还在输入type="submit"中使用onclick="checkLogin(); return false;"

【讨论】:

    【解决方案2】:

    您可以做的是从输入 type="submit" 中删除 onclick 事件并将其添加到表单中:

    <form onsubmit="return checkLogin()">
    

    要让它工作,你必须添加

    return false
    

    在您关闭函数之前添加到您的 javascript 函数

    【讨论】:

    • 感谢您的回答,但没有奏效。我得到的结果与我将 onclick='checkLogin()'; return false; 放入 input type="submit" 时的结果相同。
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 2012-04-30
    • 2011-07-27
    • 2017-04-15
    • 2011-04-25
    • 2018-06-30
    相关资源
    最近更新 更多