我有一个注册表单和一个登录表单。我尝试在注册期间使用函数hash_password
保存密码$password = trim(mysqli_escape_string($conn,$_POST['inputPassword']));
$password_hash = password_hash($password, PASSWORD_DEFAULT);
$query_create_user = "INSERT INTO users (user_username, user_password, user_email) VALUES ('$username', '$password_hash', '$email')";
$result = mysqli_query($conn, $query_create_user);
对于登录,我还使用函数密码哈希。
$password = trim(mysqli_escape_string($conn,$_POST['inputPassword']));
$password_hash = password_hash($password, PASSWORD_DEFAULT);
$query_verify_user = "SELECT user_id, user_username, user_password FROM users WHERE user_username = '$username'";
if($row['user_username']==$username && $row['user_password']==$password_hash){
Header('Location: ../index.php?page=login');
}
$ row [' user_password'] == $ password_hash永远不会相同。在注册期间,我有一个哈希标记。注册后,我无法获得与注册期间相同的哈希标记。有什么问题?
答案 0 :(得分:1)
这是password_hash的预期行为,为了检查输入的密码是否正确,您应该使用password_hash的PHP文档中所述的password_verify。
意味着您的代码应该是这样的
$password = $_POST['inputPassword'];
$query_verify_user = "SELECT user_id, user_username, user_password FROM users WHERE user_username = '$username'";
if($row['user_username']==$username && password_verify($password, $row['user_password']){
header('Location: ../index.php?page=login');
}
答案 1 :(得分:0)
要执行密码验证,请使用password-verify。 password_hash()使用强大的单向散列算法创建新的密码哈希。