在我的函数文件中,我有以下代码:
function password($password, $dbpassword = false){
if($dbpassword){
$password = mysqli_real_escape_string($GLOBALS["mysqli"], $_POST["$dbpassword"]);
if(empty($password))
$password = mysqli_real_escape_string($GLOBALS["mysqli"], $_GET["$dbpassword"]);
if(empty($password))
return false;
}
$hasher = new PasswordHash(8, false);
if (strlen($password) > 72)
return false;
else{
if($dbpassword){
$check = $hasher->CheckPassword($password, $dbpassword);
if ($check)
return true;
else
return false;
}else{
$hash = $hasher->HashPassword($password);
if (strlen($hash) >= 20)
return $hash;
else
return false;
}
}
}
在另一个文件(包含函数和 PHPASS php 文件)中,我有以下代码:
$pass = password("Vlad");
if(password("Vlad", $pass)){
echo 11;
}else{
echo 22;
}
它返回 22。为什么?
当您使用第二个未NULL
变量调用 password
函数时,它将返回 false
,除非您在调用页面时设置了 POST
或GET
变量。
该POST
或GET
变量的名称必须是您第一次使用函数时哈希的密码的密码哈希
$_POST["$dbpassword"]
或
$_GET["$dbpassword"]
我怀疑表单中表单字段的名称是否在不断变化,因此这可以解释为什么该函数总是在您第二次调用它时返回false
。