管理ユーザーから正しくログアウトしようとしています。これが私の機能です:
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ユーザーのみ)。ここで、管理者がログアウトした場合は、現在のセッションを破棄し、Cookieも破棄して、ブラウザーに保存されているセッションCookieを使用して管理ページに戻ることができないようにします。しかし、私のコードは動作しません。ログアウトをクリックすると、管理ページに直接戻ることができます。ただし、Cookieを削除すると、機能は完全です。では、ここでのCookie削除機能の何が問題になっていますか?
多分あなたの問題はクッキーではなく、あなたの管理ページのキャッシュされたバージョンを表示しているブラウザです。あれ?打ったときに消えてしまったら F5、それはおそらくそれです。これは、正しいcache-control
ヘッダーを設定することでソートできます。
キャッシュの設定方法の問題について this SO question を確認してください。質問(ブラウザにキャッシュを強制する)正反対の方法ですが、キャッシュをオフにするには何を変更すればよいかがわかります。
あなたが本当にすべての拠点をカバーしたいのなら、やってみてください:
setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();
これにより、残りのPHP実行中はセッションデータにアクセスできなくなります。ブラウザはCookieが設定されていることを表示する場合がありますが、$ _ SESSIONスーパーは空白になります
セッションCookieの期限切れに問題がある他の人のためのヒント:
PHP-なぜこのセッションID Cookieを削除できないのですか?
上記のリンクの質問への回答のように、常にsession_get_cookie_params()を使用してください。