我正在为我的网站创建一个使用mysql数据库的登录系统。
当用户注册时,它会使用以下方法将密码保存到数据库:
$password = hash("sha512","somesalt".$password."moresalt");然后,在登录时,使用相同的哈希函数将输入的密码与数据库中的密码进行比较。
为了比较数据库,我使用以下方法:
$query = mysql_query("select * from users where password='$password' AND email='$email'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {//do login stuff}但是行总是返回0。当我从寄存器和登录中删除哈希函数时,它会很好地登录。怎么了?
顺便提醒一下,如果有人想知道,我会使用mysqli,但我的网站托管的数据库版本是旧的。我相信他们用的是5.2。
我忘了提到,我确实检查了数据库,以确保数据库符合在这些图片中看到的结果(不能嵌入图片,所以链接):
u6weYp5wTCQng5eVhTSkZFRDg/view?usp=sharing u6weYp5wTCQVRXTkNqdzhWUFE/view?usp=sharing
发布于 2015-03-16 14:54:43
数据库中密码字段的长度是多少?
在我看来,原因似乎是哈希密码长度太长,当保存到数据库部分或它被删除.
然后当你比较你得到0行..。
发布于 2015-03-16 15:10:28
好的,我建议您使用mysql库以外的准备语句。它更安全,更可靠。
$query = "SELECT * FROM `users` WHERE AND `email`=:email_token";然后准备并执行查询。
$data = $connection->prepare($query);
try {
$data->bindParam(":email_token",$_POST["email"],PDO::PARAM_STR);
$data->execute();
}
$result = $data->fetch(PDO::FETCH_ASSOC);
while($row = $result) {
$out = $row["password"];
}
if($out == $_POST["password"]) {
//loggin
} else {
//get lost
}
这是一个非常基本的结构,但本质上您希望先从数据库中提取密码,然后比较字符串,而不是使用查询完成所有这些操作。
https://stackoverflow.com/questions/29079835
复制相似问题