Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

Cookie löschen mit PHP: Die richtige Vorgehensweise

Sie befinden sich: Home > Php Tutorial > Wie kann ich ein Cookie...

Wie kann ich ein Cookie löschen mit PHP?


Eintrag am:  03.12.2022
Hits / Besucher:  917
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

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.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.