3

ログアウト ページがセッションを破棄していません。同じ問題について検索して読みましたが、どれも私の問題を解決しませんでした。

以下は私のログアウトページです。間にテンプレートがあるため、2 つの 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 に答える