web-dev-qa-db-ja.com

Cookieの削除に関する問題、設定が解除されない

私はphpのマニュアルとインターネットでcookieを削除する方法を検索してみました。

setcookie("name", '', 1);

または

setcookie("name", '', time()-3600);

しかし、FirefoxのCookieダイアログでCookieを確認しても、同じ値が残っています。次の行を使用して、このCookieを設定しました。

setcookie("name", $value, time() + 259200, $path);

私は this の質問をstackoverflow:で見つけましたが、どの回答も問題を解決しませんでした。著者が言ったように、私もすべてのパラメータを入れてみましたが、効果はありませんでした。

誰かが問題を見ていますか?

24
RemiX

マニュアルの状態

Cookieは、設定時と同じパラメーターで削除する必要があります。 value引数が空の文字列またはFALSEで、他のすべての引数が以前のsetcookieの呼び出しと一致する場合、指定した名前のCookieがリモートクライアントから削除されます。これは、値を「削除済み」に設定し、有効期限を過去1年に設定することにより、内部的に実現されます。

したがって、$pathは正しく指定されています-それを削除する場合も同様です。たとえば、Cookieがサブディレクトリで指定されている場合、親ディレクトリまたは子ディレクトリ(あるいはその両方)から削除できない場合があります。

権限がどのように機能するかは完全にはわかりませんが、Web開発者ツールバーを使用して、削除しようとしているCookieのpathが何であるかを表示することができます。

55
Paul Lammertsma

わかりませんが、今はうまくいきます。マジックコードは次のとおりです。

setcookie("name", '', 1, $path);

私はすでにそれを試したことはありませんか?何であれ、今はうまくいきます。皆さん、助けてくれてありがとう!

10
RemiX

誰も言及していないことに驚いています(または私が見逃したかもしれません)が、ドメインも重要です! sub-domain.example.comを使用していて、Cookieが.example.comからのものである場合、ドメインパラメータを明示的に設定する必要があります。そうしないと、現在のドメインが想定され、機能しません。

setcookie('cookiename', FALSE, -1, '/', '.example.com');

サブドメイン値は、親ドメインからCookieをクリアしません。

7
bfuzze

特定のパスのdelete Cookieで、pathパラメータが末尾のスラッシュ '/'で終わっている場合、FirefoxとIEで機能します。 ChromeおよびOperaでは機能しません。末尾にスラッシュがない場合、ChromeおよびOperaでのみ機能します。

したがって、両方を使用する必要があります。

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE
2
Ruslan

使ってみた

setcookie("name", "", -1);

そして、Apache/PHP5を搭載した私のサーバーでは、Cookieをクリアしました(少なくともvar_dump($ _ COOKIE)は空の配列を示しました)。

2
Keeper

スクリプトがすでにそのHTTPヘッダーを送信しているかどうかを確認しましたか?

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}
2
Bob Fanger

cookieを設定

setcookie( 'cookiename'、$ cookie_value、time()+(86400 * 30)、 "/"); // 86400 = 1日

クッキーの設定を解除

setcookie( 'cookiename'、 ''、time()-3600、 "/");

パニックする必要はありません。 Cookieの設定に使用する関数をコピーするだけで、時間を短縮できます。混乱しないでください。簡単かつ明確にしてください。

1
Rajnesh Thakur

これは私のためのトリックをしました:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);
1
Felipe

同様の問題がありました。

何らかの理由で、logout.phpから何かをエコーすると、実際にCookieが削除されることがわかりました。

echo '{}';
setcookie('username', '', time()-3600, '/');
0
Nate

Cookieを削除/使用しようとしているのとは異なるパスに保存したことがあります。

例えばに入る。 Chrome Cookie設定とCookieパスを確認し、パスをsetcookieコマンドに追加して、次のように削除します。

setcookie( "my_cookie_name","",1,'/mypath');

間違ったパスに保存されているCookieを削除または設定解除しようとしても機能せず、非常にイライラすることがあります。

0
kochauf

正解で述べたように(更新されたものを送信してください)、設定を解除するには、Cookieを設定するために使用されるすべてのパラメーターが必要ですsecureおよびhttponly

セットする

setcookie("name_cookie", $name_value, 0, '/', $domain, false, true);

未設定

setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);
0
Gendrith

私は使用することをお勧めします

ob_start();

最初のl

0
Benhard Jei

時間を小さい値に設定し、Cookieの値を使用してみましたか?

setcookie("name", 'n', 1);
0
Sandeep

Global.phpのようなグローバルコア関数ファイルでカスタム関数を定義するだけです

function delete_cookie()
{
unset($_COOKIE['cookiename']);
setcookie('cookiename',NULL,time()-3600, '/');
return true;
}

のようにHTMLコードの上部でこの関数を使用します

include('global.php')
if(isset($_GET['delete_cookie']))
{
delete_cookie(); //if you want to pass the parameters into the function also possible like delete_cookie(param1);
}
0

私にも10回に1回は発生します。私たちがコーディングする方法の問題だと思います。

これは私のコードです

setcookie("token", "", time() - 36000, "/");