【发布时间】: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++ 中使用自动完成功能。