下面的代码是登录系统。用户名是管理员,密码是密码(您可以稍后更改),它现在做的是在表单发送后,它只是显示登录页面。我找不到它有什么问题。请帮忙。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,一切都很好。
添加到密码\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为真,那么你应该在数据库中存储一个新的密码哈希,最好为每个密码都有动态哈希。
当用户注册时,您将使用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