Wer mit Cookies in PHP arbeitet, muss sie auch wieder zuverlässig entfernen können. Ob nach einem Logout, bei einer Einstellungsänderung oder zum Schutz der Privatsphäre: Das Löschen von Cookies gehört zum Grundwissen jedes PHP-Entwicklers. In diesem Tutorial lernst du die korrekte Vorgehensweise und vermeidest typische Fehler.
Die empfohlene Methode: Cookie mit setcookie() löschen
PHP bietet keine eigene Funktion zum Löschen von Cookies. Stattdessen setzt du den Cookie mit setcookie() auf einen leeren Wert und legst das Ablaufdatum in die Vergangenheit. Der Browser erkennt dann, dass der Cookie abgelaufen ist, und entfernt ihn automatisch.
<?php
/* Cookie "username" löschen:
Leerer Wert + Ablaufdatum in
der Vergangenheit */
setcookie("username", "", time() - 3600);
?>
Der Aufruf time() - 3600 setzt das Ablaufdatum eine Stunde in die Vergangenheit. Der genaue Zeitraum spielt keine Rolle, solange er in der Vergangenheit liegt.
Wichtig: Pfad und Domain müssen übereinstimmen
Wenn du beim Setzen des Cookies einen bestimmten Pfad oder eine Domain angegeben hast, musst du diese Parameter auch beim Löschen exakt wiederholen. Andernfalls erkennt der Browser den Cookie nicht als denselben und löscht ihn nicht.
<?php
/* Cookie wurde mit Pfad gesetzt:
setcookie("username", "Max",
time() + 86400, "/meinbereich/"); */
/* Zum Löschen denselben Pfad angeben */
setcookie(
"username",
"",
time() - 3600,
"/meinbereich/"
);
?>
Warum unset() allein nicht reicht
Ein häufiger Fehler ist der Versuch, einen Cookie nur mit unset() zu löschen. unset() entfernt den Eintrag lediglich aus dem superglobalen Array $_COOKIE für den aktuellen Request. Der Cookie bleibt aber im Browser des Nutzers gespeichert und wird beim nächsten Seitenaufruf erneut mitgesendet.
<?php
/* FALSCH: Löscht den Cookie
nur aus dem PHP-Array,
nicht aus dem Browser! */
unset($_COOKIE["username"]);
/* RICHTIG: Browser-Cookie löschen
UND PHP-Array aufräumen */
setcookie("username", "", time() - 3600);
unset($_COOKIE["username"]);
?>
Die Kombination beider Aufrufe ist die sauberste Lösung: setcookie() weist den Browser an, den Cookie zu entfernen, und unset() räumt das PHP-Array für den restlichen Script-Verlauf auf.
Vor dem Löschen prüfen: Existiert der Cookie?
Mit isset() kannst du vor dem Löschen prüfen, ob der Cookie überhaupt vorhanden ist. Das macht deinen Code robuster und vermeidet unnötige Aufrufe.
<?php
if (isset($_COOKIE["username"])) {
setcookie("username", "", time() - 3600);
unset($_COOKIE["username"]);
echo "Cookie wurde gelöscht.";
}
?>
Alle Cookies auf einmal löschen
Manchmal ist es nötig, sämtliche Cookies einer Seite zu entfernen, zum Beispiel bei einem vollständigen Logout. Dafür kannst du mit einer Schleife über $_COOKIE iterieren.
<?php
foreach ($_COOKIE as $sName => $sWert) {
setcookie($sName, "", time() - 3600, "/");
unset($_COOKIE[$sName]);
}
?>
Häufige Stolperfallen
Beim Löschen von Cookies gibt es einige Punkte, die regelmäßig zu Fehlern führen.
Header already sent: Wie beim Setzen muss auch das Löschen von Cookies vor jeder HTML-Ausgabe erfolgen. Andernfalls gibt PHP die Warnung "Headers already sent" aus und der Cookie wird nicht gelöscht.
Pfad vergessen: Wurde der Cookie mit einem bestimmten Pfad gesetzt, muss dieser Pfad auch beim Löschen angegeben werden.
Nur unset() verwendet: Wie oben beschrieben reicht unset() allein nicht aus. Der Browser muss über setcookie() informiert werden.
Tipp zum Debuggen: In Chrome oder Firefox kannst du mit F12 die Entwicklertools öffnen. Unter Application > Cookies (Chrome) bzw. Speicher > Cookies (Firefox) siehst du sofort, welche Cookies gesetzt sind und ob dein Löschversuch erfolgreich war.
Modernes Cookie-Management mit PHP 7.3+
Seit PHP 7.3 unterstützt setcookie() eine Array-Syntax, mit der du alle Parameter übersichtlich angeben kannst. Beim Löschen sieht das so aus:
<?php
setcookie('benutzer', '', [
'expires' => time() - 1,
'path' => '/',
'domain' => '.example.com',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
Die Attribute secure, httponly und samesite erhöhen die Sicherheit deiner Cookies erheblich. Secure stellt sicher, dass der Cookie nur über HTTPS gesendet wird. HttpOnly verhindert den Zugriff per JavaScript. Und SameSite schützt vor Cross-Site-Request-Forgery (CSRF). Mehr zu diesen Attributen findest du im setcookie()-Tutorial.
Fazit und Best Practices
Das Löschen von Cookies in PHP ist einfach, wenn du die Grundregeln beachtest:
1. Lösche Cookies immer mit setcookie() und einem Ablaufdatum in der Vergangenheit.
2. Gib beim Löschen denselben path und domain an, mit dem der Cookie gesetzt wurde.
3. Verwende unset() nur zusätzlich, um den Cookie im aktuellen Script zu entfernen.
4. Nutze ab PHP 7.3 die Array-Syntax mit secure, httponly und samesite.