我向你寻求帮助,我解释了我的问题。在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的好主意。