(PHP) セッションクッキーを正しく破棄するには?

管理者ユーザーから正しくログアウトしようとしています。以下は私の関数です。

function logout()
{
    $_SESSION = array(); //destroy all of the session variables
    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_destroy();
}

基本的に、一度私がパスワードを認証すると、私はセッションを有効であると設定します(合計1人のユーザーだけ)。しかし、私のコードはうまくいきません。ログアウトを押すと、管理者ページに直接戻ることができます。

もし、本当にすべてをカバーしたいのであれば、こうしてみてはどうだろう。

setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();

これで、PHP を実行する間、セッションデータへのアクセスを防ぐことができます。 ブラウザはクッキーが設定されていることを表示しますが、 $_SESSION スーパーは空白になります。

解説 (1)
ソリューション

もしかしたら、あなたの問題はクッキーではなく、ブラウザがキャッシュされたバージョンの管理画面を表示していることかもしれません。その可能性はありませんか?もし、あなたが F5 を押すと消えるなら、それはおそらくそれでしょう。これは、正しい cache-control ヘッダを設定することで解決できます。

キャッシュの設定方法については、this SO questionをチェックしてみてください。この質問はまさにその逆(ブラウザにキャッシュを強制すること)についてですが、キャッシュをオフにするために何を変更すればよいかがわかるでしょう。

解説 (6)

セッション・クッキーの有効期限に問題がある他の人のためのヒントです。

https://stackoverflow.com/questions/3989347/php-why-cant-i-get-rid-of-this-session-id-cookie

上のリンクの質問に対する答えのように、常にsession_get_cookie_params()を使用してください。

解説 (0)