337 Stimmen

Ein Cookie entfernen

Wenn ich ein Cookie entfernen möchte, versuche ich

unset($_COOKIE['hello']);

Ich sehe in meinem Cookie-Browser von Firefox, dass das Cookie noch existiert. Wie kann ich das Cookie wirklich entfernen?

7voto

Soumen Pasari Punkte 125

Wenn Sie das Cookie vollständig aus Ihrer aktuellen Domain löschen möchten, dann wird Ihnen der folgende Code bestimmt helfen.

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

Dieser Code löscht die Cookie-Variable vollständig aus all Ihren Domänen, d.h.: " / " - bedeutet, dass der Wert der Cookie-Variable für alle Domänen und nicht nur für die aktuelle Domäne oder den aktuellen Pfad festgelegt wurde. time() - 300 bedeutet, dass der Wert auf eine frühere Zeit festgelegt wurde, so dass er abläuft.

Auf diese Weise wird sie perfekt gelöscht.

5voto

boksa Punkte 213

Um ein Cookie zu löschen, müssen Sie den Wert einfach auf NULL setzen:

"Wenn Sie ein Cookie mit anderen Werten als den Standardwerten für die Ablaufzeit, den Pfad oder die Domäne gesetzt haben, müssen Sie diese Werte beim Löschen des Cookies erneut angeben, damit das Cookie ordnungsgemäß gelöscht wird." Zitat aus dem Buch "Learning PHP5".

Dieser Code sollte also funktionieren (funktioniert bei mir):

Setzen des Cookies: setcookie('foo', 'bar', time() + 60 * 5);

Löschung des Cookies: setcookie('foo', '', time() + 60 * 5);

Aber mir ist aufgefallen, dass alle das Ablaufdatum auf vorbei setzen, ist das notwendig und warum?

3voto

Greg Punkte 77

Ich weiß, dass es schon lange her ist, dass dieses Thema erstellt wurde, aber ich habe einen kleinen Fehler in dieser Lösung gesehen (ich kann es so nennen, weil es ein Detail ist). Ich stimme zu, dass die bessere Lösung wahrscheinlich diese Lösung ist:

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

Im vorliegenden Fall jedoch löschen Sie die Cookies in jedem Fall, in dem die Funktion "Zurücksetzen" funktioniert, und erstellen sofort neue, abgelaufene Cookies, falls die Funktion "Zurücksetzen" nicht funktioniert.

Das bedeutet, dass selbst wenn die Funktion zum Zurücksetzen funktioniert, immer noch 2 Cookies auf dem Computer vorhanden sind. Aus logischer Sicht besteht das Ziel darin, die Cookies zu löschen, wenn dies möglich ist, und wenn dies nicht möglich ist, sie verfallen zu lassen, um das "sauberste" Ergebnis zu erzielen.

Ich denke also, dass wir das besser tun sollten:

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

Danke und noch einen schönen Tag :)

2voto

Jo Smo Punkte 6405

Setzen Sie einfach das Ablaufdatum auf eine Stunde vor, wenn Sie das Cookie "entfernen" wollen, etwa so:

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

または

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

Quelle: http://www.php.net/manual/en/function.setcookie.php

Sie sollten die filter_input() Funktion für alle Globals, die ein Besucher eingeben/manipulieren kann, etwa so:

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

Mehr darüber können Sie hier lesen: http://www.php.net/manual/en/function.filter-input.php und hier: http://www.w3schools.com/php/func_filter_input.asp

2voto

$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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X