用户登录的会话丢失


Session lost for user login

我向你寻求帮助,我解释了我的问题。在User()类中,我编写了一个小函数来登录,然后录制会话并设置cookie。

这是:

public function login($username, $password) {   
    $this->db->query("SELECT * FROM users WHERE username = :username AND status = :status LIMIT 1");
    $this->db->bind(':username', $username);
    $this->db->bind(':status', 1);
    $row = $this->db->single();
    $count = $this->db->rowCount();
        if ($count > 0) {
            if (password_verify($password, $row['password'])) {
                $this->setSession($row);
                return true;
            } else {
                return false;
            }
        }
}
public function setSession($row) {
    $_SESSION['session'] = [
        'id' => $row['id'],
        'username' => $row['username'],
        'email' => $row['email']
    ];
    //set cookie
    setcookie("name_cookie", md5($_SESSION['session']['username']/$_SESSION['session']['password']), time()+3600 * 24 * 365);
}

这里有一个功能可以检查用户是否连接,以保护页面:

public function isLoggedIn() {
    if(isset($_SESSION['session'])) {
        return true;
    }
    return false;
}

我的问题是,即使设置了cookie,不幸的是,总时间后的会话将过期。

我将cookie设置为一年,但正如我所说,用户的登录会话将在一段时间后过期。我该如何更正?

PHP会话在服务器级别过期。默认时间大约为20分钟,您可以在php.ini设置中控制它。

您可以使用setcookie将cookie保存到用户的浏览器,然后使用PHP中的$_COOKIE变量进行检查。请参阅setcookie。

但要注意这样做的安全风险。任何人都可以窃取cookie,然后作为该用户访问该网站。在这里可以找到一些保护cookie的好主意。