(PHP)如何正确销毁会话cookie?

时间:2010-02-11 02:08:03

标签: php cookies session

我正在尝试正确退出管理员用户。这是我的功能:

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删除功能有什么问题?

3 个答案:

答案 0 :(得分:9)

如果您真的想覆盖所有基地,请尝试:

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

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

答案 1 :(得分:7)

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

查看this SO question有关如何设置缓存的问题。问题是完全相反(强制浏览器缓存),但你会找出改变什么来关闭缓存。

答案 2 :(得分:3)

对于遇到会话Cookie过期问题的其他人,请提示:

PHP - why can't I get rid of this session id cookie?

始终使用session_get_cookie_params(),如上面链接中对问题的回答。