php登录。无法登录

php登录。无法登录,php,Php,我的登录功能有问题。出于某种原因,crypt函数不起作用。当我尝试登录时,它一直告诉我我的用户名和密码是错误的。我使用的是PHP5.4 <?php class USER { private $database; function __construct($DB_connection) { $this->database = $DB_connection; } public function register($first_n

我的登录功能有问题。出于某种原因,crypt函数不起作用。当我尝试登录时,它一直告诉我我的用户名和密码是错误的。我使用的是PHP5.4

<?php
class USER
{
    private $database;

    function __construct($DB_connection)
    {
        $this->database = $DB_connection;
    }

    public function register($first_name,$last_name,$username,$email,$password)
    {
        try
        {
           $hash_format ="$2y$10$";
           $salt = "Salt22Characters0rMore";
          $format_and_salt = $hash_format . $salt;

            $created_password = crypt($password);

            $res = $this->database->prepare("INSERT INTO tb_users(username,email,password) 
                                                       VALUES(:username, :email, :password)");

            $res->bindparam(":username", $username);
            $res->bindparam(":email", $email);
            $res->bindparam(":password", $created_password);                                          

            $res->execute();    

            return $res;    
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }               
    }

    public function login($username,$email,$password, $created_password)
    {
        try
        {
            $res = $this->database->prepare("SELECT * FROM tb_users WHERE username=:username OR email=:email LIMIT 1");
            $res->execute(array(':username'=>$username, ':email'=>$email));
            $userRow=$res->fetch(PDO::FETCH_ASSOC);
            if($res->rowCount() > 0)
            {
                if
                (crypt($password, $userRow['password']) == $created_password)

                {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function is_loggedin()
    {
        if(isset($_SESSION['user_session']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function logout()
    {
        session_destroy();
        unset($_SESSION['user_session']);
        return true;
    }
}
?>

您需要更改使用该类的方式。试试这个:

<?php
class USER
{
    private $database;

    function __construct($DB_connection)
    {
        $this->database = $DB_connection;
    }

    public function register($username,$email,$password)
    {
        try
        {
            $created_password = $this->saltPassword($password);

            $res = $this->database->prepare("INSERT INTO tb_users(username,email,password)
                                                   VALUES(:username, :email, :password)");

            $res->bindparam(":username", $username);
            $res->bindparam(":email", $email);
            $res->bindparam(":password", $created_password);

            $res->execute();

            return $res;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function login($username,$email,$password)
    {
        try
        {
            $res = $this->database->prepare("SELECT * FROM tb_users WHERE username=:username OR email=:email LIMIT 1");
            $res->execute(array(':username'=>$username, ':email'=>$email));
            $userRow=$res->fetch(PDO::FETCH_ASSOC);
            if($res->rowCount() > 0)
            {
                if
                ($this->saltPassword($password) === $userRow['password'])

                {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function is_loggedin()
    {
        if(isset($_SESSION['user_session']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function logout()
    {
        session_destroy();
        unset($_SESSION['user_session']);
        return true;
    }

    private function saltPassword($password)
    {
        $hash_format ="$2y$10$";
        $salt = "Salt22Characters0rMore";
        $format_and_salt = $hash_format . $salt;
        return crypt($password, $format_and_salt);
    }
}
?>

在我们开始实际解决您的crypt问题之前,您的代码非常混乱。您将参数传递给未使用的寄存器($first_name和$last_name),您将创建未使用的变量($$format_和_salt,这也意味着不需要$hash_format和$salt)。