php密码函数不工作
在我的网站上,有机会创建用户并登录。我想使用PHP的新密码函数php密码函数不工作,php,mysql,passwords,Php,Mysql,Passwords,在我的网站上,有机会创建用户并登录。我想使用PHP的新密码函数password\u hash和password\u verify,以提高安全性。在我自己的计算机中,我使用了PHP5.5,因此函数运行良好。然而,在我的webhotel中,有一个版本为5.2的PHP,所以我必须从下载密码函数。现在这些函数不起作用了。看起来像是password\u hash没有返回任何内容,因为注册后数据库中没有任何内容 我已经检查了错误日志,它在中没有关于此的内容。是的,我在E|u ALL | E|u STRICT
password\u hash
和password\u verify
,以提高安全性。在我自己的计算机中,我使用了PHP5.5,因此函数运行良好。然而,在我的webhotel中,有一个版本为5.2的PHP,所以我必须从下载密码函数。现在这些函数不起作用了。看起来像是password\u hash
没有返回任何内容,因为注册后数据库中没有任何内容
我已经检查了错误日志,它在中没有关于此的内容。是的,我在E|u ALL | E|u STRICT
上有错误报告
,记录错误
,我正在查看正确的文件
我重复一遍:函数在我的计算机中的硬编码(PHP5.5)不会出现任何问题,但在下载(PHP5.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();
}
}
//模型:
公共函数getUser($email,$pass){
$this->search(“从电子邮件=?”的用户中选择*”,数组($email));
如果($this->countRows()fetchRow();
如果(!password\u verify($pass,$row[“password”])){
返回false;
}
if(密码需要重新设置($row[“password”],密码默认值)){
$this->run(“更新用户设置密码=?其中id=?”,数组(密码\u散列($pass,密码\u DEFAULT),$row[“id]”);
}
返回$row;
}
公用函数userExists($email){
$this->search(“从电子邮件=?”的用户中选择*”,数组($email));
如果($this->countRows()model->userExists($\u POST[“email”])){
标题(“位置:“.PUBLICROOT.”/index/index/error/emailAlreadyExists”);
模具();
}
$this->model->run(“插入到用户(firstname、lastname、email、密码、生日)值(?、、?、?、?)”,
数组($\u POST[“firstname”],$\u POST[“lastname”],$\u POST[“email”],
密码散列($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
$this->in();
}
//登录
公共职能{
$u=$this->model->getUser($\u POST[“email”],$\u POST[“password”]);
如果($u==false){
标题(“位置:.PUBLICROOT./index/index/error/signInFailed”);
模具();
}否则{
$_会话[“userid”]=$u[“id”];
$_SESSION[“email”]=$_POST[“email”];
$_SESSION[“firstname”]=$u[“firstname”];
$\会话[“lastname”]=$u[“lastname”];
$\会话[“时间”]=time();
标题(“位置:.PUBLICROOT./home/index”);
模具();
}
}
有什么想法吗?可能想
此库需要PHP>=5.3.7或具有$2y修复程序后端口的版本(如RedHat提供的)
- PHP5.5提供了使用BCrypt算法的函数
- 使用PHP5.3.7,您可以使用
- 由于PHP5.3,可以使用BCrypt(算法“2a”而不是“2y”)
- 早期的PHP版本不支持BCrypt,您最好的选择可能是库,尽管它们也有一个不太安全的算法。也许您可以找到一个扩展,可以在您的服务器上安装BCrypt支持
password\u hash
只是一个包装器,所有版本的PHP5都可以使用它……但需要注意的是,5.3.7之前的PHP版本在密码中包含一个bug,它会大大削弱用它散列的密码,这就是为什么存在版本限制。使用是您自己的风险,@user3725053。