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

Ton*_*ark 17 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();
}
Run Code Online (Sandbox Code Playgroud)

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

MAN*_*UCK 9

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

setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();
Run Code Online (Sandbox Code Playgroud)

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

  • 在我看来,你应该在第一行写`session_name()`(等于`PHPSESSID`). (17认同)

Pek*_*ica 7

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

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

  • 没关系,我想我想出来了 - 我没有在我的登出页面上调用session_start()(注销文本链接到一个调用上面函数的注销页面) (2认同)