Php 密码验证是否始终返回假值?
我目前正在尝试为我的网站建立一个登录页面,这是我大学课程的一部分。我可以在网站上用哈希密码创建一个帐户。哈希密码显示为:Php 密码验证是否始终返回假值?,php,Php,我目前正在尝试为我的网站建立一个登录页面,这是我大学课程的一部分。我可以在网站上用哈希密码创建一个帐户。哈希密码显示为: $2y$10$c17e2YWOPrzZy8RNLZo9Yejm0vHebwhdkD7tyzBgMcIiu6zO5XVn2 我搜索了一些解决方案,比如检查散列密码是否为60个字符,以及其他未成功的解决方案。我还询问了另外两位大学讲师和同学,但他们都没有提供帮助 我的代码是: <?php $username = $_POST["username"]; $
$2y$10$c17e2YWOPrzZy8RNLZo9Yejm0vHebwhdkD7tyzBgMcIiu6zO5XVn2
我搜索了一些解决方案,比如检查散列密码是否为60个字符,以及其他未成功的解决方案。我还询问了另外两位大学讲师和同学,但他们都没有提供帮助
我的代码是:
<?php
$username = $_POST["username"];
$password = $_POST["password"];
echo $username;
echo " ";
echo $password;
echo " ";
$sql = "SELECT userno, email, password FROM Users WHERE username = '$username';";
$result = $conn->query($sql);
echo $sql;
if ($result->num_rows == 1){
$row = $result->fetch_assoc();
if (password_verify( $password, $row["password"]))
{
echo "<br/> Welcome back to Ryan's Review Website!";
echo "<br/> You have succsesfuly logged in!";
$_SESSION["loggedin"] = true;
$_SESSION["userno"] = $row['userno'];
}
else {
echo "<br/>Sorry, It seems that either you do not have an account or you have mistyped your username and/or password";
echo "<br/><a href='Sign In.html'>Click Here</a> to try again!";
echo "<br/><a href='Register.html'>Click Here</a> if you do not have an account!";
}
}
$conn->close();
?>
在以下行中保存密码哈希时出现错误:
$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';
$hash = password_hash( $password, PASSWORD_BCRYPT );
在这里,您实际上尝试散列数组$password
,这将抛出一个
警告:参数1应为字符串,数组给定
根据您的设置,您可能看不到此警告(以及以下警告)并在数据库中存储错误内容
所以改变
$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';
到
你对SQL注入开放-你应该修复:)你使用了哪种数据类型作为密码?当你存储密码时,你是否使用了
password\u hash()
?请同时显示你是如何存储密码的。我想你忘了从Post中散列密码谢谢,这个问题困扰了我很久了。这个问题出现在我的注册页面上,而不是我的登录页面上,这解释了为什么它这么长时间都没有被注意到。至于这个警告,我从来没有看到过,但记下来以后参考肯定是好的。
$password ['password1'] = isset($_POST['password1']) ? $_POST['password1'] : '';
$password = isset($_POST['password1']) ? $_POST['password1'] : '';