【发布时间】:2017-01-24 14:33:07
【问题描述】:
我正在尝试使用password_verify() 函数验证我的数据库中的散列密码,但它似乎不起作用。请帮忙。
<?php
include("config.php");
include("vendor/password.php");
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = mysqli_real_escape_string($db , $_POST['umail']);
$password = mysqli_real_escape_string($db , $_POST['upassword']);
$userQuery = "SELECT username, password FROM users WHERE username = '$username' AND password='$password'";
$result = mysqli_query($db ,$userQuery);
$queryRow = mysqli_fetch_array($result , MYSQLI_ASSOC);
$queryCount = mysqli_num_rows($result);
$verifyPassowrd = password_verify($_POST['upassword'] , $queryRow[2]);
if ($verifyPassowrd){
header("Location:home.php");
}else{
echo "Username Or Password is invalid";
}
mysqli_close($db);
}
?>
【问题讨论】:
-
确保在散列之前don't escape passwords或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
-
password_hash()函数可以生成一些非常长的文本(当前默认为 60 个字符),因此现在使数据库字段尽可能大将允许所需的长度。其次,PHP 团队正在向该方法添加更多算法,这意味着哈希可以并且将会增长。我们也不想限制用户使用他们选择的密码或密码短语的能力。最好为更改留出空间。 -
向我们展示如何保存散列密码以及保存散列的表定义。
-
不要逃避密码......我曾经为此苦苦挣扎了一段时间。直到我在我的数据库中将密码设置为 varchar(255)