public function login($email, $password){
$stmt = $this->pdo->prepare("SELECT 'user_id' FROM 'users' WHERE 'email'=:email AND 'password' = :password");
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
$count = $stmt->rowCount();
if($count >0){
$_SESSION['user_id'] = $user->user_id;
header('Location: home.php');
}else{
return false;
}
}
在密码中使用md5我收到错误: 只应在第18行的D:\ xammp \ htdocs \ twitter \ core \ classes \ user.php中通过引用传递变量
并且在删除md5时,虽然我在数据库中输入了正确的密码,但我收到了无效密码的错误。
答案 0 :(得分:2)
使用PHP
内置password_hash()
功能加密您的密码。
<强> password_hash():强>
使用强大的单向散列算法创建新的密码哈希。
像这样使用它:
$passHash = password_hash("myPassword", PASSWORD_BCRYPT);
注意:
PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。这将使用“$ 2y $”标识符生成标准的crypt()兼容哈希。结果将始终为60个字符的字符串,或者失败时为FALSE。
参考http://php.net/password-hash。
然后改变这一行:
$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);
到此:
$stmt->bindValue(":password", $passHash, PDO::PARAM_STR);
要验证密码,请使用passsword_verify()
。
<强> passsword_verify():强>
验证给定的哈希值是否与给定的密码匹配。
参考http://php.net/password-verify。
像这样使用passsword_verify()
:
if(password_verify('myPassword', $passHash))
{
// the password is correct
}
else
{
// incorrect password
}
答案 1 :(得分:0)
正如@Philipp的评论中所提到的,md5
不是加密而不是用于密码 - 但要做你正在尝试的事情,你需要将md5
的返回值设置为变量
所以改变
$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);
要
$md5hash=md5($password);
$stmt->bindParam(":password", $md5hash, PDO::PARAM_STR);