因此,我在从数据库中调用用户时遇到了问题,因为SHA1密码与DB SHA1密码没有进行正确的比较。
代码:
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['email'])) {
$username = $_POST['email'];
}
if(isset($_POST['password'])) {
$password = $_POST['password'];
}
if($username && $password) {
$stmt = "SELECT memID, memFirst, memLast, roleID FROM MEMBER WHERE memEmail LIKE ? AND memPass = SHA1(?)";
try{
$STH = $DBH->prepare($stmt);
$STH->bindParam(1, $username);
$STH->bindParam(2, $password);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
echo 'true';
if($STH->rowCount() == 1) {
echo 'count';
$row = $STH->fetch();
$_SESSION['user'] = $row['memID'];
$_SESSION['user']['first'] = $row['memFirst'];
$_SESSION['user']['last'] = $row['memLast'];
$_SESSION['user']['role'] = $row['roleID'];
$_SESSION['user']['timeout'] = time();
header('Location: index.php');
}
}catch(PDOException $e) {
echo $e->getMessage();
}
}
}现在DB中唯一的记录是测试用户,他们的记录是:
|memFirst|memLast|roleID|memPass |memEmail |
|test |test |3 |7110eda4d09e062aa5e4a390b0a572ac|test@test.com|
this is SHA1(1234)这些是我所调用的值,但它不会带来记录。
当我使用SHA1 DB值运行代码时,它运行得很完美,但是当我尝试根据用户的输入运行它时,它说行计数是0。
发布于 2016-02-24 17:51:38
sha1总是160位长,产生一个40长的字符串,而您的7110eda4d09e062aa5e4a390b0a572ac只有32位长。
作为旁白:
如果您稍后决定使用password_hash(),您必须记住它会产生一个60长的字符串。
它的手册建议使用255。
“使用bcrypt算法(缺省值为PHP 5.5.0)。请注意,随着新算法和更强的算法添加到PHP中,此常量将随着时间的推移而改变。因此,使用此标识符的结果长度可能随时间而变化。因此,建议将结果存储在一个可扩展到60个字符以上的数据库列中(255个字符将是一个不错的选择)。”
https://stackoverflow.com/questions/35608960
复制相似问题