首页 > 解决方案 > 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");

没有收到任何错误。它只是没有做它应该做的事情。

标签: phpsession-cookiessetcookie

解决方案


您的注销代码需要检查 cookie 是否未设置,这意味着 cookie 已经过期。您正在做的是检查是否设置了 cookie,当 cookie 已经过期时,如果语句将不起作用。试试下面的代码。

将以下代码放在注销功能中。

session_destroy();
setcookie('email', '', time()-60, '/');
redirect("../login.php");

将此代码放在标题中

if(!isset($_COOKIE['email'])) {
     //logout(); call the logout function here.
}

推荐阅读