mysqli,sha1 / salt密码有效检查

时间:2012-06-06 12:47:37

标签: php mysql

所以我正在创建一个登录表单。验证用户输入以检查电子邮件格式是否正确以及密码是否超过6个字符,如果这些字符有效则检查登录是否有效 凭证有效,并且与用户表中存储的电子邮件/密码相匹配。在注册表单中,我使用sha1和给定的盐加密密码。当我检查是否 密码是正确的我写相同的检查,但即使我输入正确的登录 凭证似乎无法验证登录。所以这是我的代码: 用户登录功能:

function user_login($email, $password){
    global $db;
    $salt='%#@#@**#_-!';
    $userid = id_from_email($email);
    $email = sanitize($email);
    $password  = sha1($password.$salt);
    $query="SELECT UserId FROM users WHERE Email= '".$email."' and UserPass= '".$password."' ";
    $result=$db->query($query);
    $valid = $result->num_rows;
    return ($valid >1) ? $userid : false;
}

这是login.php的一部分,用于检查登录是否有效:

else if(empty($errors) == true) {
        $userlogin=user_login($email, $password);
        if ($userlogin==false){
        $errors[]='Wrong email/password combination.';
        } else {
        //set the user session
        session_start();
        $_SESSION['UserId']=$userlogin;
        header('Location:success.php');
        }

无论我输入正确的密码和电子邮件。它总是输出“错误的电子邮件/通行证组合” 以下是我如何将pass存储在register.php

上的数据库中
$salt='%#@#@**#_-!';
$password = sha1($password.$salt);

如果你能帮助我,我将非常感激。

三江源。

3 个答案:

答案 0 :(得分:1)

使用适当的电子邮件变量修改对数据库的调用:

$query="SELECT UserId FROM users WHERE Email= '".$useremail."' and UserPass= '".$password."' ";

答案 1 :(得分:1)

你真正想要的是:

return ($valid >= 1) ? $userid : false;

而不是

return ($valid > 1) ? $userid : false;

除非您希望至少2行与给定的电子邮件和密码哈希相匹配。

我更喜欢这个:

return ($valid == 1) ? $userid : false;

答案 2 :(得分:0)

您正在从数据库中选择UserId,但实际上从未使用过该结果;您的user_login()函数返回id_from_email($email)的结果,而不是从数据库收到的ID。检查您的id_from_email()返回值,或者更好的是 - 返回数据库查询中的ID。

相关问题