当前位置: 首页 > 知识库问答 >
问题:

密码系统没有做任何事情

谢运良
2023-03-14

下面的代码是登录系统。用户名是管理员,密码是密码(您可以稍后更改),它现在做的是在表单发送后,它只是显示登录页面。我找不到它有什么问题。请帮忙。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):用户'laugin1'@'176.31.10.37'(使用密码:NO)在/home/laugin1/public_html/admin/index.PHP的第9行[2015年11月15日07:00:58欧洲/莫斯科]PHP警告:mysqli_select_db()需要两个参数,第10行[2015年11月15日07:00:58欧洲/莫斯科]php警告:mysqli_real_escape_string()需要2个参数,第11行[2015年11月15日07:00:58欧洲/莫斯科]php警告:mysqli_real_escape_string()需要2个参数,第12行[2015年11月15日07:00:58欧洲/莫斯科]php警告:mysqli_query()期望参数1为mysqli,第14行[2015年11月15日07:00:58欧洲/莫斯科]php警告:mysqli_fetch_数组()期望参数1为mysqli结果,第15行的/home/laughin1/public_html/admin/index.php中给出了null

但是如果我把MySQLi改成MySQL,一切都很好。

共有2个答案

谢麒
2023-03-14

添加到密码\u验证Andrew的注释

$encryptPassword=password\u hash($users注册密码,password\u BCRYPT);

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

在登录获取用户的散列时,典型的选择是在电子邮件上,假设这是用户的唯一标识符

$hash=findUserByEmail($email);//dummy函数,您实现了这个

password_verify用户登录密码;

看见http://php.net/manual/en/function.password-verify.php

提示:如果$isAuth为真,那么你应该在数据库中存储一个新的密码哈希,最好为每个密码都有动态哈希。

王磊
2023-03-14

当用户注册时,您将使用password\u hash散列他们的密码并存储在数据库中,当用户尝试登录时,您将使用password\u 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();

有关为什么的更多信息,请单击此处为什么在通过PHP中的标题('Location..)重定向后必须调用“exit”?

更新:

password\u verify接受两个参数,(string$password,string$hash),您将把登录密码作为第一个参数,并将数据库中存储的哈希放入第二个参数。如果匹配,它将返回true,否则返回false

 类似资料:
  • 密码系统是加密技术及其附带基础设施的实现,以提供信息安全服务。 密码系统也称为cipher system 。 基本密码系统的各种组件是Plaintext, Encryption Algorithm, Ciphertext, Decryption Algorithm,加密密钥和解密密钥。 Where, Encryption Key是发件人已知的值。 发送方将加密密钥与明文一起输入加密算法,以便计算密

  • 任务完成事件 function onFinish(\swoole_server $server, $taskId,$callBackObj); 当worker进程投递的任务在task_worker中完成时将触发本事件 task进程的onTask事件中没有调用finish方法或者return结果,worker进程不会触发onFinish 执行onFinish逻辑的worker进程与下发task任务的

  • 执行任务事件 function onTask(\swoole_server $server, $taskId, $workerId,$callBackObj); 在task_worker进程内被调用,可以用以下方法向task_worker进程投递新的任务 AsyncTaskManager::getInstance()->add(Runner::class); 当前的Task进程在调用onTask回

  • 问题内容: 这是我的代码。我正在尝试使用箭头键使球移动。当我运行上述程序时 ,不显示球 ( 如果我将坐标更改为显示0,30球), 并且事件未触发,球既不移动也不跳跃 ? 问题答案:

  • 简介 Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 app/Listeners 目录下。这些目录只有当你使用 Artisan 命令来生成事件和监听器时才会被自动创建。 事件机制是一种很好的应用解耦方式,因为一个事件可以拥有多个互不依赖的监听器。例如,如果你希望每次订单发货时向用户发送

  • 事件机制是一种很好的应用解耦方式。CatLib事件系统让我们可以订阅和监听程序中出现的各种事件。 应用程序已经默认提供了事件系统,供给全局事件使用。如果您要定义私有范围的事件可以这么做: var dispatcher = new EventDispatcher(); 名词定义 载荷是指程序调用所附带的上下文信息。不同的调用者所提供的上下文信息各不相同。 注册普通监听器 通过 AddListene