3

我的注销页面没有破坏会话。我已经搜索并阅读了相同的问题,但没有一个能解决我的问题。

下面是我的注销页面。请注意,我有两个 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

4 回答 4

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

于 2013-04-22T12:01:40.983 回答
2

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

于 2013-04-22T12:01:43.497 回答
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.";
    ?>
于 2013-04-22T12:05:10.920 回答
0

尝试使用:

session_cache_limiter ('private_no_expire, must-revalidate');
于 2013-04-22T12:01:16.967 回答