无法结束PHP会话

时间:2014-01-03 14:19:20

标签: php session

好的,所以我有以下代码回应我已经设置的一些会话变量。(它们像预期的那样回应。)

(的index.php)

<?php session_start();?>
Username: <?php echo $_SESSION['username']; ?><br>
Password(encrypted): <?php echo $_SESSION['password']; ?><br>
ThemeColor: <?php echo $_SESSION['themecolor']; ?><br>

<小时/> 我有这个代码,我尝试结束会话,但是当我运行上面的代码时,变量仍然回显,所以会话仍然是活动的

(logout.php)

<?php
session_start();
session_unset();
session_destroy();
?>

<小时/> 你能告诉我我做错了吗?

4 个答案:

答案 0 :(得分:2)

直接来自PHP documentation

<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>

答案 1 :(得分:1)

保留现有的代码段并尝试添加以下代码段:

// Clear all values of the $_SESSION array by creating a new one
$_SESSION = array();

// If your session is setup to use cookies, expire the cookie
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

上面的代码片段是从原来的答案here借来的。所有功劳都归原作者 Pekka

答案 2 :(得分:0)

会话使用cookie,因此您需要销毁此cookie:

    function destroySession()
    {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params['path'], $params['domain'],
            $params['secure'], $params['httponly']
        );
        session_destroy();
        unset($_SESSION);
    }

答案 3 :(得分:0)

使用session_destroy()后,会话cookie被删除,会话不再存储在服务器上。 $ _SESSION中的值可能仍然可用,但它们不会在下一页加载。