35

私は、Cookieを削除する方法について、PHPマニュアルとインターネットを検索してみましたが、すべての人が言うのとまったく同じ方法で試しました。

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

また

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

しかし、FirefoxのCookieダイアログでCookieを確認すると、同じ値のままです。次の行を使用してこのCookieを設定します。

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

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

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

4

18 に答える 18

71

マニュアルには次のように記載されています

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

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

権限がどのように機能するかは完全にはわかりませんが、Web Developerツールバーを使用して、削除しようとしているCookieのパスを確認することをお勧めします。

于 2010-05-18T10:48:58.300 に答える
14

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

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

サブドメインの値は、親ドメインから Cookie を消去しません。

于 2016-11-21T17:06:03.393 に答える
13

わかりました、私は本当に理解していませんが、今はうまくいきます。マジックコードは次のとおりです。

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

私はすでにそれを試していませんか??! とにかく、それは今動作します。助けてくれてありがとう、人々!

于 2010-05-20T11:47:40.873 に答える
6

特定のパスの Cookieを削除し、パスパラメータが末尾のスラッシュ「/」で終わる場合、Firefox と IE では機能しますが、Chrome と Opera では機能しません。末尾にスラッシュがない場合、Chrome と Opera でのみ機能します。

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

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE
于 2016-01-22T10:34:32.443 に答える
2

使ってみた

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

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

于 2010-05-18T10:39:05.943 に答える
2

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

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}
于 2010-05-18T10:41:47.493 に答える
2

これは私にとってはうまくいきました:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);
于 2016-10-31T00:45:04.520 に答える
0

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

setcookie("name", 'n', 1);
于 2010-05-18T10:36:41.737 に答える
0

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

ob_start();

最初の l

于 2012-11-16T07:13:19.293 に答える
0

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);
}
于 2015-10-21T05:46:08.717 に答える
0

私も10回に1回はそうですけどね。コーディングの仕方に問題があると思います。

これは私のコードです

setcookie("token", "", time() - 36000, "/");
于 2010-05-18T10:43:12.510 に答える
0

クッキーを設定する

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

クッキーの設定を解除

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

慌てる必要はありません。クッキーを設定するために使用する関数をコピーするだけで、時間を差し引いたものになります。混乱しないで、簡単かつ明確にしてください。

于 2016-05-28T11:22:56.980 に答える
-1
var remember = $.cookie('auto_login');
if (remember == 'true') {
    var username = $.cookie('username');
    var password = $.cookie('password');
    $('#username').val(username);
    $('#password').val(password);
}

$('#logsub').click(function (event) {
    if ($('#auto_login').is(':checked')) {
        var username = $('#username').val();
        var password = $('#password').val();
        // set cookies to expire in 14 days
        $.cookie('username', username, {expires: 14});
        $.cookie('password', password, {expires: 14});
        $.cookie('auto_login', true, {expires: 14});
    } else {
        // reset cookies
        $.cookie('username', null);
        $.cookie('password', null);
        $.cookie('auto_login', null);
    }
});
于 2016-12-14T12:06:40.797 に答える