2009-03-09 19 views
5

ドメイン上のすべてのユーザーCookieを削除するためのPHPコードを作成しようとしています。 JavaScriptで設定されたクッキーないサーバー上のJavaScriptで設定されたCookieを削除できません。

<?php 
$domain = 'www.example.com'; 
$deleteExpiration = time() - 60*60*24*365*10; // 10 years ago 
foreach (array_keys($_COOKIE) as $cookie) { 
    setcookie($cookie, 0, $deleteExpiration, '/', $domain); 
} 

http://www.example.com/delete_cookies.phpにこのコードを実行しているサーバー上で設定されたすべてのクッキーを削除しますが、以下は

は、私が得たものです。

「Firefox Cookies」ダイアログを使用して、問題のあるCookieが実際には(path =/domain = www.example.com)のものであることを確認しました。ライブHTTPヘッダを使用して、私は次のヘッダーが送信されることがわかります。

Set-Cookie: CookieName=0; expires=Fri, 12-Mar-1999 19:36:15 GMT; path=/; domain=www.example.com 

だから私は予想通りますsetcookieコマンドが機能していると信じています。 Firefoxはリクエストを尊重していないだけです。

私は、サーバー上domain=www.example.comでクッキーを設定した場合、それがdomain=".www.example.com"とFirefoxのクッキーダイアログにリストされていることに気づいたが、私はその後、JavaScriptコードを使用して、次のクッキーを設定した場合、先頭にドットがある1つの追加の事追加されません。

私は間違っていますか?どうすればこれらのクッキーを削除できますか?

+0

http://stackoverflow.com/a/25967822/1642018 – AMB

+0

['$ cookie-> delete()'](https://github.com/delight-im/PHP-Cookie/blob/) 004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php#L173)[このスタンドアロンライブラリ](https://github.com/delight-im/PHP-Cookie)にあるように便利です。 – caw

答えて

5

私は同様の問題を抱えており、ドメインを通過しないことで解決しました。サイドノートで

setcookie($cookie, '', 1, '/');

cookie_spec "からより高いレベルの値へのパスを設定すると、他のより特定のパスマッピングをオーバーライドしない。指定されたクッキー名に対して複数の一致がある場合、しかし別々のパスと "異なるパスの場所に同じ名前のCookieがある場合は、それぞれのCookieを削除する必要があります。

関連する問題