print仍会在destroy之后写入旧的Session变量值

时间:2013-01-28 20:51:12

标签: php session destroy

我使用了一些Session变量。当我注销时,函数show_number应该写0个数字,但它不是。

logout.php:

<?php
session_start();
session_destroy();
require_once('upper.php');
show_number(); //this function is declared on upper.php
?>

的index.php:

<?php
$_SESSION['var'] = 1;
echo "<a href="logout.php">Logout</a>
?>

upper.php:

function show_number() { // shows value of $_SESSION['var'];
if (isset($_SESSION['var']))
  echo "1";
else
  echo "0";
}

问题是: 当我单击Logout链接时,echo仍会写入数字1,我​​必须重新加载页面才能看到0值。

干杯

1 个答案:

答案 0 :(得分:5)

session_destroy不会清除全局$_SESSION对象:

  

它不会取消任何与之关联的全局变量   会话,或取消设置会话cookie。

清除代码中的会话数据:

session_start();
session_destroy();
$_SESSION = array();

或者更彻底地根除所有会话数据(来自同一文档页面):

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