注销不会破坏会话

时间:2013-04-22 11:59:30

标签: php mysql

我的退出页面并没有令人讨厌的会话。我搜索并阅读了同样的问题,但没有一个解决了我的问题。

以下是我的退出页面。请注意,我有两个php块,因为我之间有一个模板。

<?php
  error_reporting(E_ALL ^ E_NOTICE);
  session_start();
  $userid = $_SESSION['userid'];
  $username = $_SESSION['username'];
?>
<?php
  if($username && $userid) {
    session_destroy();
    echo "You have been logged out.<a href='members.only.php'>My Logs.</a>";
  }
  else
    echo "You are not logged in.";
?>

在我退出后可以看到我有一个成员限制页面的链接,所以我可以检查。但它仍然欢迎登录的最后一个用户。

4 个答案:

答案 0 :(得分:4)

请阅读session_destroy的文档:

session_destroy() destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie. To use the session variables again, session_start() has to be called.

这意味着,你应该做点别的事。例如:

$_SESSION = array();

答案 1 :(得分:2)

session_destroy()会销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。您可以阅读更多相关信息here

答案 2 :(得分:1)

将session_destroy部分替换为:

   <?php
      if($username && $userid) {

    // 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();
    $_SESSION = array();
        echo "You have been logged out.<a href='members.only.php'>My Logs.</a>";
      }
      else
        echo "You are not logged in.";
    ?>

答案 3 :(得分:0)

尝试使用:

session_cache_limiter ('private_no_expire, must-revalidate');