web-dev-qa-db-ja.com

クッキーを削除する

Cookieを削除したいときは

unset($_COOKIE['hello']);

私はFirefoxから私のクッキーブラウザでクッキーがまだ存在しているのを見ます。どうすれば本当にクッキーを削除できますか?

232
sanders

あなたはこれを試してもよろしいですか

if (isset($_COOKIE['remember_user'])) {
    unset($_COOKIE['Hello']);
    unset($_COOKIE['HelloTest1']);
    setcookie('Hello', null, -1, '/');
    setcookie('HelloTest1', null, -1, '/');
    return true;
} else {
    return false;
}
250
Nikunj K.

値を ""に、有効期限を昨日(または過去の任意の日付)に設定します。

setcookie("hello", "", time()-3600);

それからクッキーはページが次にロードされたときに期限切れになります。

269
Re0sless

クッキーを削除するきれいな方法は$_COOKIE値とブラウザクッキーファイルの両方をクリアすることです:

if (isset($_COOKIE['key'])) {
    unset($_COOKIE['key']);
    setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
207
Mouloud

PHPサーバーで計算されたように、Cookieを確実に削除するには、過去いつでも有効期限を切るように設定するだけでは不十分です。これは、クライアントコンピュータにはサーバの時刻とは異なる時間がある可能性があるためです。

ベストプラクティスは、現在のcookieを1秒で期限切れになる空白のcookieで上書きすることです。 将来は エポックの後(1970年1月1日00:00:00 UTC)、

setcookie("hello", "", 1);
23
Thejoker123

それはあなたのコードでクッキーを設定解除しますが、$ _COOKIE変数はリクエストごとに更新されるので、それはちょうど次のページリクエストで戻ってきます。

実際にCookieを取り除くには、過去の有効期限を設定してください。

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
18
Eric Petroelje

私のコードにも同じ問題があり、それがCookieパスの問題であることがわかりました。このスタックオーバーフローの投稿をチェックしてください。 php set cookieを削除できません

パス値 "/"を使用してCookieを設定しましたが、消去しようとしたときにパス値が設定されていなかったため、消去されませんでした。それで、これがうまくいった例です:

クッキーを設定する:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

クッキーをクリアする:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

それが役立つことを願っています。

13
user3285097

過去に有効期限が切れるようにクッキーを設定した場合、ブラウザはそれを削除します。 php.netの setcookie()削除の例を参照してください。

7
Alistair Knock

こうすると、PHP v7 setcookie()コードが機能します。

<?php
    setcookie('user_id','');
    setcookie('session','');
?>

ポート80をスニッフィングしている間のtcpdumpの出力から、サーバーは次のHTTPヘッダーをクライアント(ブラウザー)に送信します。

Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0

以下のリクエストでパケットを観察すると、ブラウザはこれらのクッキーをヘッダで送信しなくなります。

6
Nulik

PHP docsの " 例2 setcookie()delete example "というラベルのサンプルを参照してください。ブラウザからクッキーを消去するには、クッキーが期限切れになったことをブラウザに伝える必要があります。その後ブラウザはそれを削除します。 unsetは、あなたが使ったように、COOKIE配列から 'hello'クッキーを削除するだけです。

6
Jarret Hardie

Cookieを削除するには、値をNULLに設定するだけです。

「有効期限、パス、またはドメインにデフォルト以外の値を使用してCookieを設定した場合、Cookieを正しく削除するには、Cookieを削除するときに同じ値を再度入力する必要があります。」 "Learning PHP5"本から引用してください。

だから、このコードは動作するはずです(私のために動作します):

クッキーを設定する:setcookie('foo', 'bar', time() + 60 * 5);

クッキーを削除する:setcookie('foo', '', time() + 60 * 5);

しかし、私は誰もが有効期限を過去に設定していることに気づきました、それは必要です、そしてなぜですか?

3
boksa

あなたが書くことができるすべてのクッキーを削除するには:

foreach ($_COOKIE as $key => $value) {
    unset($value);
    setcookie($key, '', time() - 3600);
}
2
Ralphe Samson

このトピックが作成されてから長い時間が経ったことを私は知っていますが、私はこの解決策の中で少し間違いを見ました(それは詳細なので、私はそのように呼ぶことができます)私はよりよい解決策がおそらくこの解決策であることに同意します:

if (isset($_COOKIE['remember_user'])) {
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            return true;
        } else {
            return false;
        }

しかし、今回のケースでは、設定解除機能が機能するすべての場合にCookieを削除し、設定解除機能が機能しない場合には直ちに期限切れの新しいCookieを作成します。

つまり、設定解除機能が機能しても、コンピューターには2つのCookieがあります。論理的な観点からすると、求められている目標は、可能であればクッキーを削除し、実際には不可能であれば期限切れにすることです。 「最もきれいな」結果を得るために。

だから、私たちはもっとやるべきだと思います:

if (isset($_COOKIE['remember_user'])) {
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            return true;
        } else {
            return false;
        }

ありがとう、そして良い一日を過ごしてください:)

1
Greg
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";

// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds

// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];

// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");

// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); //  time() - 3600 means, set the cookie expiration date to the past hour.

このようにクッキーを「削除」したい場合は、有効期限を1時間前に設定するだけです。

setcookie ("TestCookie", "", time() - 3600);

または

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);

出典: http://www.php.net/manual/en/function.setcookie.php

次のように、訪問者が入力/操作できるすべてのグローバルに対してfilter_input()関数を使用する必要があります。

$visitors_ip = filter_input(INPUT_COOKIE, 'id');

あなたはそれについてもっとここで読むことができます: http://www.php.net/manual/en/function.filter-input.php そしてここで: http://www.w3schools.com/php/func_filter_input.asp

1
Jo Smo

時間のために0を入力するとき、あなたはブラウザのために "now"を意味します。

setcookie("key", NULL, 0, "/");

私はそれを私に与えるクロムブラウザでそれをチェックしました:

Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
0
Amir Forsati

現在のすべてのドメインからCookieを完全に削除したい場合は、次のコードを参考にしてください。

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

このコードはあなたのすべてのドメインからcookie変数を完全に削除します。 "/" - Cookie変数の値が現在のドメインやパスだけでなく、すべてのドメインに設定されていることを示します。 time() - 300は、期限切れになるように前回の時刻に設定することを示します。

それがどのように完全に削除されたか.

0
Soumen Pasari

あなたは単にこのカスタマイズ機能を使用することができます。

function unset_cookie($cookie_name) {
    if (isset($_COOKIE[$cookie_name])) {
        unset($_COOKIE[$cookie_name]);
        setcookie($cookie_name, null, -1);
    } else { return false; }
}

$ _COOKIE ['user_account']を削除したい場合。
以下を使用してください。

unset_cookie('user_account');
0
Kenny

それは簡単です!

setcookie("cookiename", "cookievalue", 1);
0
L F

クッキーの値に基づいてセッション変数を設定することができます

session_start();

if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}

echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
0
_11one