如何使用PHP正确销毁会话cookie?

2022-08-30 22:17:56

我正在尝试正确注销管理员用户。这是我的函数:

function logout()
{
    $_SESSION = array(); //destroy all of the session variables
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    session_destroy();
}

基本上,一旦我对密码进行身份验证,我就将会话设置为有效(总共只有1个用户)。现在,当管理员点击注销时,我想销毁当前会话,并销毁cookie,以便他们不能使用浏览器中存储的会话cookie返回管理页面。但是我的代码不起作用。我点击注销,我可以直接导航回管理页面。但是,如果我删除我的cookie,功能是完美的。那么这里的cookie删除功能有什么问题?


答案 1

如果你真的想覆盖所有的基础,请尝试做:

setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();

这应该会阻止在 PHP 执行的其余部分进一步访问会话数据。浏览器可能仍显示正在设置的 cookie,但 $_SESSION super 将为空


答案 2

也许您的问题不是cookie,而是浏览器显示您的管理页面的缓存版本。可能吗?如果它在你点击时消失了,那可能就是这样。这可以通过设置正确的标头进行排序。F5cache-control

看看这个关于如何设置缓存的问题的SO问题。问题恰恰相反(强制浏览器缓存),但你会弄清楚要改变什么来关闭缓存。


推荐