Wenn ich ein Cookie entfernen möchte, versuche ich es
unset($_COOKIE['hello']);
Ich sehe in meinem Cookie-Browser von Firefox, dass das Cookie noch vorhanden ist. Wie kann ich den Cookie wirklich entfernen?
Wenn ich ein Cookie entfernen möchte, versuche ich es
unset($_COOKIE['hello']);
Ich sehe in meinem Cookie-Browser von Firefox, dass das Cookie noch vorhanden ist. Wie kann ich den Cookie wirklich entfernen?
Antworten:
Sie können dies versuchen
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Es ändert nichts, wenn Sie es entfernen.
unset($_COOKIE['Hello']);
ist eigentlich wichtig, wenn Sie das Cookie später im Code überprüfen möchten .
Setzen Sie den Wert auf "" und das Ablaufdatum auf gestern (oder ein Datum in der Vergangenheit).
setcookie("hello", "", time()-3600);
Dann läuft das Cookie beim nächsten Laden der Seite ab.
Eine saubere Möglichkeit, ein Cookie zu löschen, besteht darin, sowohl den $_COOKIE
Wert als auch die Browser-Cookie-Datei zu löschen :
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
setcookie
Aufruf aufnehmen:setcookie('key', '', time() - 3600, '/');
unsetting
erfolgreich war.
null
Werten vorhanden sind, müssen Sie stattdessen array_key_exists () verwenden, da ein Cookie mit einem null
Wert durch eine isset()
Prüfung nicht gefunden wird .
Um ein Cookie zuverlässig zu löschen, reicht es nicht aus, es so einzustellen, dass es in der Vergangenheit jederzeit abläuft, wie von Ihrem PHP-Server berechnet. Dies liegt daran, dass Client-Computer Zeiten haben können und oft haben, die von denen Ihres Servers abweichen.
Die beste Vorgehensweise ist es, das aktuelle Cookie mit einem leeren Cookie zu überschreiben , die 1 Sekunde abläuft in der Zukunft nach der Epoche (1. Januar 1970 00.00.00 UTC), wie so:
setcookie("hello", "", 1);
Dadurch wird das Cookie in Ihrem Code deaktiviert. Da die Variable $ _COOKIE jedoch bei jeder Anforderung aktualisiert wird, wird sie bei der Anforderung auf der nächsten Seite erneut angezeigt.
Legen Sie das Ablaufdatum in der Vergangenheit fest, um das Cookie tatsächlich zu entfernen:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
der Cookie nicht gebraucht werden?
Ich hatte das gleiche Problem in meinem Code und stellte fest, dass es sich um ein Problem mit dem Cookie-Pfad handelte. Schauen Sie sich diesen Beitrag zum Stapelüberlauf an: PHP-Set-Cookie kann nicht gelöscht werden
Ich hatte das Cookie mit dem Pfadwert "/" gesetzt, hatte aber keinen Pfadwert, als ich versuchte, es zu löschen, sodass es nicht gelöscht wurde. Hier ist ein Beispiel dafür, was funktioniert hat:
Cookie setzen:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Cookie löschen:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Hoffentlich hilft das.
Wenn Sie festlegen, dass das Cookie in der Vergangenheit abläuft, wird es vom Browser entfernt. Siehe Beispiel zum Löschen von setcookie () auf php.net
Siehe das Beispiel mit der Bezeichnung " Beispiel # 2 setcookie () delete example " aus den PHP-Dokumenten. Um ein Cookie aus dem Browser zu löschen, müssen Sie dem Browser mitteilen, dass das Cookie abgelaufen ist. Der Browser entfernt es dann. unset
Wenn Sie es verwendet haben, wird nur das Hallo-Cookie aus dem COOKIE-Array entfernt.
So funktioniert PHP v7 setcookie () Code, wenn Sie Folgendes tun:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Aus der Ausgabe von tcpdump sendet der Server beim Sniffing an Port 80 die folgenden HTTP-Header an den Client (Browser):
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
Wenn der Browser Pakete in den folgenden Anforderungen beobachtet, sendet er diese Cookies nicht mehr in den Headern
Um ein Cookie zu löschen, müssen Sie nur den Wert auf NULL setzen:
"Wenn Sie ein Cookie mit nicht standardmäßigen Werten für eine Ablaufzeit, einen Pfad oder eine Domäne festgelegt haben, müssen Sie diese Werte erneut angeben, wenn Sie das Cookie löschen, damit das Cookie ordnungsgemäß gelöscht wird." Zitat aus dem Buch "Learning PHP5".
Dieser Code sollte also funktionieren (funktioniert für mich):
Cookie setzen:
setcookie('foo', 'bar', time() + 60 * 5);
Cookie löschen:
setcookie('foo', '', time() + 60 * 5);
Aber ich habe bemerkt, dass jeder das Ablaufdatum auf Vergangenheit setzt, ist das notwendig und warum?
''
ist nicht dasselbe wie null
.
So entfernen Sie alle Cookies, die Sie schreiben könnten:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Stellen Sie einfach das Ablaufdatum auf vor einer Stunde ein, wenn Sie das Cookie wie folgt "entfernen" möchten:
setcookie ("TestCookie", "", time() - 3600);
oder
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 verwenden, die ein Besucher eingeben / bearbeiten kann, wie folgt:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Weitere Informationen finden Sie hier: http://www.php.net/manual/en/function.filter-input.php und hier: http://www.w3schools.com/php/func_filter_input.asp
Ich weiß, dass es 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 löschen Sie die Cookies jedoch in jedem Fall, in dem die nicht gesetzte Funktion funktioniert, und erstellen sofort neue abgelaufene Cookies, falls die nicht gesetzte Funktion nicht funktioniert.
Das bedeutet, dass selbst wenn die nicht gesetzte Funktion funktioniert, immer noch 2 Cookies auf dem Computer vorhanden sind. Das geforderte Ziel besteht aus logischer Sicht darin, die Cookies zu löschen, wenn dies möglich ist, und wenn dies wirklich nicht der Fall ist, lassen Sie sie ablaufen. um "das sauberste" Ergebnis zu erhalten.
Ich denke, wir sollten es besser machen:
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 einen schönen Tag :)
$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.
Wenn Sie das Cookie vollständig aus Ihrer gesamten aktuellen Domain löschen möchten, hilft Ihnen der folgende Code auf jeden Fall.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Dieser Code löscht die Cookie-Variable vollständig aus Ihrer gesamten Domain, dh; "/" - Gibt an, dass der Wert der Cookie-Variablen für alle Domänen festgelegt wurde, nicht nur für die aktuelle Domäne oder den aktuellen Pfad. time () - 300 bedeutet, dass es auf eine vorherige Zeit eingestellt ist, sodass es abläuft.
So wird es perfekt gelöscht.
Sie können eine Sitzungsvariable basierend auf Cookie-Werten festlegen
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Sie können einfach diese Anpassungsfunktion verwenden:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Wenn Sie $ _COOKIE ['user_account'] entfernen möchten.
Benutz einfach:
unset_cookie('user_account');
Wenn Sie 0
für die Zeit eingeben , meinen Sie "jetzt" (+ 0s von jetzt ist eigentlich jetzt) für den Browser und es löscht das Cookie.
setcookie("key", NULL, 0, "/");
Ich habe es im Chrome-Browser überprüft, der mir Folgendes gibt:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
Setzen Sie einfach den Wert des Cookies auf, false
um ihn zu deaktivieren.
setcookie('cookiename', false);
PS: - Das ist der einfachste Weg.
Sie müssen Cookies mit PHP auf Ihrem Server und auch mit JS für Ihren Browser löschen. (Sie haben mit PHP erstellt, aber Cookie-Dateien befinden sich auch im Browser-Client.):
Ein Beispiel:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Die meisten von Ihnen vergessen, dass dies nur auf einem lokalen Computer funktioniert. Für eine Domain benötigen Sie ein Muster wie dieses Beispiel.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
setcookie
funktioniert für jede Domain, egal ob localhost oder nicht.
$cookie->delete()
von github.com/delight-im/PHP-Cookie hilfreich finden. Der Code aus der Frage löscht nur die Eigenschaft, die auf der Serverseite analysiert wurde. Der Cookie wird weiterhin auf der Client-Seite weitergeführt.