0

我为我的 Web 应用程序创建了一个登录类,它确实可以工作,但现在我创建了那个臭名昭著的“让我保持登录” - 复选框并且没有让它工作。这是我的登录课程:

<?php

    error_reporting(E_ALL ^ E_NOTICE);

class Login {

    private $error;
    private $connect;
    private $email;
    private $password;
    public $row;

public function __construct(PDO $connect) {

    $this->connect  = $connect;
    $this->error    = array();
    $this->row      = $row;


}

public function doLogin() {

    $this->email = htmlspecialchars($_POST['email']);
    $this->password = htmlspecialchars($_POST['password']);
    $this->rememberme = $_POST['rememberme'];

    if($this->validateData()) {

        $this->fetchInfo();

    }

    return count($this->error) ? 0 : 1;

}

public function validateData() {

    if(empty($this->email) || empty($this->password)) {

        $this->error[] = "Täyttämättömiä kenttiä";

    } else {

    return count($this->error) ? 0 : 1;

}

}

public function fetchInfo() {

    $query = "SELECT * FROM users WHERE email = :email AND  activation_token IS NULL";
    $stmt = $this->connect->prepare($query);
    $stmt->execute(array(

                ':email' => $this->email,

        )); 



    if($stmt->rowCount() == 0) {
        $this->error[] = "Väärä käyttäjätunnus tai salasana";
        return 0;

    } else {

            $row = $stmt->fetch(PDO::FETCH_ASSOC);

                $_SESSION['user_id'] = $row['user_id'];
                $_SESSION['email'] = $row['email'];
                $_SESSION['name'] = $row['name'];
                $_SESSION['profilepic'] = $row['profilepic'];


            if(isset($this->rememberme)) {
                setcookie("loggedin", "yes", time() + 25200);

            }

    }

    if (Register::cryptPass($this->password) != $row['password']) {
    $this->error[] = "Virheelliset kirjautumistiedot";

    } else {

        return true;

    }
        return count($this->error) ? 0 : 1;

    }



public function displayErrors() {

    if(!count($this->error)) return;
        echo "<div class='login_error'>";
        foreach($this->error as $key=>$value) {
        echo "<p>".$value."</p>";

    }

echo "</div>";

}


public function doLogout() {

    session_destroy();

}

}
?>

这是我另一个文件中的一小部分代码,我正在检查是否设置了会话或cookie:

<?php
if (isset($_SESSION['email']) || isset($_COOKIE['loggedin'])) {
?>          
    <div id="header_container_isloggedin">

    <div class="container_12">
    <header id="header">
    <div class="grid-12">

    <ul id="menu">

    <li class="profile-name">

        <a href="profile.php?id=<?php echo $_SESSION['user_id']; ?>">
        <span class="header_username">

    <img src="images/thumbnails/<?php echo $_SESSION['profilepic']; ?>" 
        class="profile_evensmaller"/>

    <span class="header_name"><?php echo $_SESSION['name']; ?></span></span></a>

    </li>

</ul>
<?php } ?>

问题是每次设置 cookie 时,它​​都不会显示我的个人资料图片或姓名,因为它们已保存在 $_SESSION 变量中。那么我应该如何解决这个问题并让它发挥作用。我知道现在这不是最安全的方法,因为我没有为那个 cookie 生成任何哈希值,但现在我唯一感兴趣的是让这个方法工作。

4

0 回答 0