在我的网站上,有机会建立用户并登录。我想使用PHP的新密码函数password_hash
和password_verify
来提高安全性。在我自己的计算机中,我有PHP 5.5,所以功能正常。但是,在我的webhotel中,有一个版本为5.2的PHP,因此我必须从Github下载密码函数。现在功能不起作用。看起来password_hash
没有返回任何内容,因为注册后我在数据库中没有任何内容。
我已经检查了错误日志,但它没有任何相关内容。是的,我error_reporting
上E_ALL | E_STRICT
,log_errors
开启,我正在查看正确的文件。
我重复一遍:函数在我的计算机(PHP 5.5)中硬编码时没有任何问题,但不能像下载那样工作(PHP 5.2)。
我的代码:
// model:
public function getUser($email, $pass) {
$this->search("SELECT * FROM users WHERE email = ?", array($email));
if($this->countRows() <= 0) {
return false;
}
$row = $this->fetchRow();
if(!password_verify($pass, $row["password"])) {
return false;
}
if(password_needs_rehash($row["password"], PASSWORD_DEFAULT)) {
$this->run("UPDATE users SET password = ? WHERE id = ?",array(password_hash($pass,PASSWORD_DEFAULT),$row["id"]));
}
return $row;
}
public function userExists($email) {
$this->search("SELECT * FROM users WHERE email = ?", array($email));
if($this->countRows() <= 0) {
return false;
}
return true;
}
// sign up
public function reg() {
if($this->model->userExists($_POST["email"])) {
header("Location: " . PUBLICROOT . "/index/index/error/emailAlreadyExists");
die();
}
$this->model->run("INSERT INTO users (firstname, lastname, email, password, birthday) VALUES (?,?,?,?,?)",
array($_POST["firstname"],$_POST["lastname"],$_POST["email"],
password_hash($_POST["password"],PASSWORD_DEFAULT),$_POST["birthday"]."-".$_POST["birthmonth"]."-".$_POST["birthyear"]));
$this->in();
}
// sign in
public function in() {
$u = $this->model->getUser($_POST["email"],$_POST["password"]);
if($u === false) {
header("Location: " . PUBLICROOT . "/index/index/error/signInFailed");
die();
} else {
$_SESSION["userid"] = $u["id"];
$_SESSION["email"] = $_POST["email"];
$_SESSION["firstname"] = $u["firstname"];
$_SESSION["lastname"] = $u["lastname"];
$_SESSION["time"] = time();
header("Location: " . PUBLICROOT . "/home/index");
die();
}
}
有什么想法吗?
答案 0 :(得分:2)
可能希望read the README
此库需要PHP&gt; = 5.3.7 或将$ 2y修复程序反向移植到其中的版本(例如RedHat提供)。
答案 1 :(得分:2)