Cookie を使用してセッションを破棄するための PHP の文書化されたアプローチに問題がありました。
// 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"]
);
}
これにより、Cookie が 2 回設定されていることがわかりました。
Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/
PHP のコメントに記載されているように、Cookie の値を空 ('') 以外に設定すると、「削除された」値は削除されますが、2 番目の Cookie セットは残ります。
それを取り除くには、上記のコードを追加する必要がありました。
ini_set('session.use_cookies', '0');
セッション処理のソースは見ていませんが、setcookie(...) がセッション モジュールをバイパスしているため、セッションは私がそれを呼び出したことを知りません。そのため、削除された Cookie を設定した後、デフォルトの Cookie を設定しています。
私はMacでテストしていました:Suhosin-Patch(cli)を使用したPHP 5.3.6(ビルド:2011年9月8日19:34:00)