密码系统没有做任何事情

时间:2015-11-15 01:38:53

标签: php mysql mysqli

以下代码是登录系统。用户名是Administrator,密码是密码(您可以稍后更改)现在它发送表单后它只显示登录页面。我发现它没有任何问题。请帮忙。 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欧洲/莫斯科] PHP警告:mysqli_connect():( 28000/1045):拒绝访问用户&#39;笑声1&#39; @&#39; 176.31.10.37&# 39; (使用密码:否)在第9行的/home/laughin1/public_html/admin/index.php中 [2015年11月15日07:00:58欧洲/莫斯科] PHP警告:mysqli_select_db()预计在第10行/home/laughin1/public_html/admin/index.php中提供2个参数,1 [15-NOV-2015 7时00分58秒欧洲/莫斯科] PHP警告:mysqli_real_escape_string()期望的是2个参数,1 /home/laughin1/public_html/admin/index.php给出第11行 [15-NOV-2015 7时00分58秒欧洲/莫斯科] PHP警告:mysqli_real_escape_string()期望的是2个参数,1 /home/laughin1/public_html/admin/index.php给出第12行 [15-NOV-2015 7时00分58秒欧洲/莫斯科] PHP警告:mysqli_query()预计参数1是在给定的/home/laughin1/public_html/admin/index.php线14上的mysqli,布尔 [2015年11月15日07:00:58欧洲/莫斯科] PHP警告:mysqli_fetch_array()期望参数1为mysqli_result,在第15行的/home/laughin1/public_html/admin/index.php中给出null

但如果我将MySQLi更改为MySQL,一切都很好。

2 个答案:

答案 0 :(得分:0)

当用户注册时,您将使用password_hash哈希密码并存储在数据库中,当用户尝试登录时,您使用password_verify验证其密码

步骤:

register->password_hash()->save_in_db()
login->fetch_hash_column_from_their_username->password_verify()
if verified->set_session->redirect, else stay_in_the_same_page

为您的表单添加一些验证,以便用户无法持续访问您的数据库,从而创建高负载并防止(略微)对您的网站提供某些保护

此外,在此行之后

header("Location:dashboard.php");

添加

exit();

有关原因的详细信息,请点击此处Why I have to call 'exit' after redirection through header('Location..') in PHP?

更新

password_verify接受两个参数( string $password , string $hash ),您将登录密码作为第一个参数,并将数据库中存储的哈希值放入第二个参数中。如果匹配其他return true

,它将return false

答案 1 :(得分:0)

添加安德鲁的密码_验证评论

  

$ encryptPassword = password_hash($ users-signup-password,PASSWORD_BCRYPT);

$ encryptedPassord中的值存储在DB(通常)中,即:成功用户注册时。

在登录时获取用户的哈希值,典型的选择将在电子邮件中假设 这是用户的唯一标识符

  

$ hash = findUserByEmail($ email); //虚函数,你实现这个

     

$ isAuth = password_verify($ users-login-password,$ hash);

请参阅http://php.net/manual/en/function.password-verify.php

提示:如果$ isAuth为true,那么您应该在db中存储新的密码哈希值,最好为每个密码设置动态哈希值。