1

セッションの破棄に関するスタックオーバーフローのページがたくさんあります。私を信じてください、私はそれらすべてを読んでいて、これに出くわしました:なぜ私のセッションが残っているのですか?

私の質問は簡単です。セッションを適切に破棄するためだけに、以下のすべてを実行する必要があるというのは本当ですか?

$tmp = session_id();
session_destroy();
session_id($tmp);
unset($tmp);

これは、そのような極端な措置を提案する唯一のページです。ほとんどのページは単に提案してsession_destroy();います。

混乱があるように見えるので、明確にするために、最も効果的で効果的な方法を探しています。

前もって感謝します。

4

3 に答える 3

2

新しい回答が来なくなったので、すべての回答に基づいて学んだことを入れています。これは、さまざまな回答の集約です。うまくいけば、それは他の人を助けるでしょう。セッションを破棄するのに 100% 効果的な最も効率的な方法を次に示します。

if (ini_get("session.use_cookies")) 
{
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
        );
}

$_SESSION = array();
$tmp = session_id();
session_id($tmp);
unset($tmp);
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(True); // true indicates the need to delete the old session

これを行う方法を教えてくれた皆さんに感謝します。これは一人の努力ではありませんでした。@Kerrek SB、@Uday @Dhruvisha に特に感謝します。さらに提案がある場合は、お気軽にコメントを追加してください。回答を編集します。

于 2012-05-19T03:24:30.143 に答える
1

session_destroy() は、現在のセッションに関連付けられているすべてのデータを破棄します。セッションに関連付けられたグローバル変数の設定を解除したり、セッション Cookie を設定解除したりすることはありません。セッション変数を再度使用するには、session_start() を呼び出す必要があります。

ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID も設定解除する必要があります。Cookie を使用してセッション ID を伝達する場合 (デフォルトの動作)、セッション Cookie を削除する必要があります。そのために setcookie() を使用できます。

$_SESSION でセッションを破棄する

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

詳しくはこちらをご覧ください。

于 2012-05-18T13:37:40.557 に答える
0
<?php
session_start();
$s_id = session_id();
echo $s_id;


session_destroy();
session_unset();


session_start();
session_regenerate_id(true);
$s_id = session_id();

?>

これを試して 。それが動作します。

于 2012-05-18T07:46:19.250 に答える