【发布时间】:2016-02-16 09:01:09
【问题描述】:
下面的代码是一个登录系统。用户名是管理员,密码是密码(您可以稍后更改)它现在所做的是在发送表单后它只显示登录页面。我找不到任何问题。请帮忙。 error_log 文件不显示任何内容。可能是密码没有正确散列。当我使用
设置密码时echo password_hash("password", PASSWORD_DEFAULT);
然后只插入结果。
<?php
session_start();
$message="";
require 'settings.php';
if(count($_POST)>0) {
$username = mysqli_real_escape_string($_POST['user_name']);
$password = mysqli_real_escape_string($_POST['password']);
$result = mysqli_query("SELECT * FROM members WHERE username='" . $username . "'");
$row = mysqli_fetch_array($result);
if(is_array($row)) {
$hash = $row['password'];
$passwordcheck = password_verify($password, $hash);
}
if($hash == $passwordcheck){
$_SESSION["user_id"] = $row['id'];
$_SESSION["user_name"] = $row['username'];
} else {
$message = "Invalid Username or Password!";
}
if(isset($_SESSION["user_id"])) {
mysqli_query("DELETE * FROM LoginAttempts WHERE IP='".$ip."'");
header("Location:dashboard.php");
}
}
?>
<div class="panel-body">
<form name="frmUser" method="post" action="">
<fieldset>
<div class="form-group">
<input class="form-control" placeholder="Username" name="user_name" type="username" autofocus>
</div>
<div class="form-group">
<input class="form-control" placeholder="Password" name="password" type="password" value="">
</div>
<input type="submit" name="submit" value="Submit" class="btn btn-success btn-lg btn-block">
</fieldset>
</form>
<?php
if($locked == 'yes'){
echo "Sorry you are locked out of the system. Please try again in";
echo $timeleft;
}
?>
</div>
编辑:现在我收到这些错误: [2015 年 11 月 15 日 07:00:58 Europe/Moscow] PHP 警告:mysqli_connect(): (28000/1045): /home 中的用户 'laughin1'@'176.31.10.37' 的访问被拒绝(使用密码:否) /laughin1/public_html/admin/index.php 在第 9 行 [15-Nov-2015 07:00:58 Europe/Moscow] PHP 警告:mysqli_select_db() 需要 2 个参数,1 个在 /home/laughin1/public_html/admin/index.php 第 10 行给出 [15-Nov-2015 07:00:58 Europe/Moscow] PHP 警告:mysqli_real_escape_string() 需要 2 个参数,1 个在 /home/laughin1/public_html/admin/index.php 第 11 行给出 [15-Nov-2015 07:00:58 Europe/Moscow] PHP 警告:mysqli_real_escape_string() 需要 2 个参数,1 个在 /home/laughin1/public_html/admin/index.php 第 12 行给出 [15-Nov-2015 07:00:58 Europe/Moscow] PHP 警告:mysqli_query() 期望参数 1 为 mysqli,布尔值在 /home/laughin1/public_html/admin/index.php 第 14 行给出 [15-Nov-2015 07:00:58 Europe/Moscow] PHP 警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 15 行的 /home/laughin1/public_html/admin/index.php 中给出 null
但是如果我将 MySQLi 更改为 MySQL,一切都很好。
【问题讨论】:
-
试试
var_dump你的$row,它显示了什么?另外,在header之后,最好加上exit() -
是的。散列显然有问题,因为如果我对密码进行散列处理,它就可以工作。
-
你使用
password_verify来验证密码,你不会再次对登录密码进行哈希处理,因为它会生成一个全新的密码,这就是它不匹配的原因 -
@andrew 谢谢。但是,如果密码存储在我之前散列的密码中,我如何使用散列检查密码。