Web アプリのログアウト機能をトラブルシューティングしようとしています。ログインすると、アプリのドメインにいくつかの Cookie が設定されます。現在のログアウト手順は次のとおりです。
- リンクをクリックすると、ログアウト ページが表示されます
- ログアウト ページは
session_destroy()
、ドメインのすべての Cookie を呼び出してループし、過去に期限切れになるように設定する関数を実行します (以下のコードを参照)。 - ログアウト ページは、そのままの HTML であるログイン ページにリダイレクトされます。
このプロセスの最後に、他のすべての Cookie は設定解除されますが、PHPSESSID
Cookie はまだ存在し、同じ値を持ち、セッションの終了時に期限切れになるように設定されたままです。
ここで何が欠けていますか?
上記のログアウト機能は次のとおりです。
function log_out_current_user() {
// Destroy the session
if (isset($_SESSION)) {
session_destroy();
}
// Expire all of the user's cookies for this domain:
// give them a blank value and set them to expire
// in the past
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
// Explicitly unset this cookie - shouldn't be redundant,
// but it doesn't hurt to try
setcookie('PHPSESSID', '', time()-1000);
}
}