php - Cookie 过期后不注销
问题描述
我在测试时将 setcookie 设置为 +60 60 秒。在浏览器中的 cookie 过期后,它不会让我退出。浏览器中的 cookie 过期并从 Chrome 中的设置中消失,但我仍然登录。希望这是有道理的。
这是我正在做的一个项目。出于安全原因,我正在尝试将 cookie 设置为过期并在一段时间后注销。
/****************User login functions ********************/
function login_user($email, $password, $remember) {
$sql = "SELECT password, id FROM users WHERE email = '".escape($email)."' AND active = 1";
$result = query($sql);
if(row_count($result) == 1) {
$row = fetch_array($result);
$db_password = $row['password'];
if(md5($password) === $db_password) {
if($remember == "on") {
setcookie('email', $email, time()+60, '/');
}
$_SESSION['email'] = $email;
return true;
} else {
return false;
}
}
} // end of function
/****************logged in function ********************/
function logged_in(){
if(isset($_SESSION['email']) || isset($_COOKIE['email'])){
return true;
} else {
return false;
}
} // functions
我的注销是:
session_destroy();
if(isset($_COOKIE['email'])) {
unset($_COOKIE['email']);
setcookie('email', '', time()-60);
}
redirect("../login.php");
没有收到任何错误。它只是没有做它应该做的事情。
解决方案
您的注销代码需要检查 cookie 是否未设置,这意味着 cookie 已经过期。您正在做的是检查是否设置了 cookie,当 cookie 已经过期时,如果语句将不起作用。试试下面的代码。
将以下代码放在注销功能中。
session_destroy();
setcookie('email', '', time()-60, '/');
redirect("../login.php");
将此代码放在标题中
if(!isset($_COOKIE['email'])) {
//logout(); call the logout function here.
}