【发布时间】:2014-12-23 19:44:11
【问题描述】:
我的 html 表单有问题。刷新我的页面后,PHP 似乎记住了我的 POST 值。这与我使用的登录表单有关。
我正在使用cookies让php与javascript通信,告诉javascript用户是否登录。
php代码:
<?php
if (isset($_POST['username'], $_POST['password'])){
$username = $_POST['username'];
$password = MD5($_POST['password']);
echo '<script>console.log("' . $username . '", "username"); </script>';
echo '<script>console.log("' . $password . '" , "password"); </script>';
/* against sql injections */
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$query = "SELECT user_id FROM User WHERE username='$username' AND password='$password'";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if ($row[user_id]){
$cookie_name = "login";
$cookie_value = "1";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
} else{
echo '<script> alert("Incorrect username and password combination");</script>';
}
}
?>
形式:
<form method="POST" id="loginForm">
<b>Login</b>
<table style="margin-top: 10px">
<tr><td>Username: </td><td><input type="text" name="username" placeholder="username" required="required"></td></tr>
<tr><td>Password: </td><td><input type="text" name="password" placeholder="password" required="required"></td></tr>
<tr><td><input type="submit" name="login" value="Login" style="margin-top: 5px"></td></tr>
</table>
</form>
因为我喜欢 javascript,所以我使用 ajax 调用与 php 和服务器数据库进行通信。
Javascript 代码:
function openPage(page) {
var content;
$.ajax({
type: 'post',
url: '/php/' + page + '.php',
success: function (data) {
document.getElementById('contentMiddle').innerHTML = data;
}
});
}
}
问题是每当我尝试刷新页面时,我的 php 代码将始终运行,并且 $_POST['username'] 和 $_POST['password'] 将始终具有刷新页面之前的 POST 值。
我总是确保在刷新页面之前删除 cookie。
有什么想法吗?
【问题讨论】:
-
称其为因祸得福。使用 MD5 不再被认为是安全的,您使用的 MySQL API 也是如此。使用
password_hash()和准备好的语句。 -
我会使用 /Post/Redirect/Get 方法en.wikipedia.org/wiki/Post/Redirect/Get
-
你确定你没有在刷新时重新发送帖子值?
-
与其实际刷新页面,不如尝试单击地址栏并按 Enter。这将重新加载页面而无需重新提交表单。
-
cookies 还有效吗?将输出发送到浏览器后,您无法在 php 中设置 cookie。
标签: javascript php ajax post