PHP 中的会话不会被销毁,cookie 也不会被删除

问题描述 投票:0回答:1

我有一个注销函数,它在 HTML 渲染之前被调用,它是:

function logout()
{
    $_SESSION = [];

    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();
}

它应该做的是删除 php 会话文件(不会发生)并且客户端 cookie 应该被删除(不会发生)。

我查看了https://www.php.net/manual/en/function.session-destroy.php但我没有看到问题。

我试过了

setcookie(session_name(), '', time() - 42000) 

但这也行不通。用 session.use_cookies 注释掉 if 没有帮助。

如果我使用 chrome 检查器工具检查,没有为 cookie 设置过期时间,但 sessionid 与服务器会话文件匹配,因此 cookie 的设置是正确的

php session cookies destroy
1个回答
0
投票

如果会话是在不同的页面上设置的,或者设置的顺序不正确,您将无法更改会话数据或销毁会话。我不确定您的具体结构,但执行检查以查看是否有会话,然后在没有会话时设置会话可能是一个不错的起点。

试试这个:

function logout() {
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    $_SESSION = array();
    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();
}
© www.soinside.com 2019 - 2024. All rights reserved.