PHP setcookie() Funktion: Alles, was Sie wissen müssen
Erfahren Sie, wie Sie mit der PHP-Funktion setcookie() Cookies setzen, lesen und löschen – mit moderner Syntax und praktischen Beispielen.
Als PHP-Entwickler müssen Sie möglicherweise Cookies setzen, um Informationen auf der Client-Seite zu speichern. Die Funktion setcookie() ist eine eingebaute PHP-Funktion, die dies übernimmt. In diesem Artikel behandeln wir die moderne Syntax, das Setzen, Lesen und Löschen von Cookies, die häufigsten Fallstricke und wann Sie stattdessen Sessions verwenden sollten.
Was ist die setcookie() Funktion?
Die Funktion setcookie() ist eine in PHP eingebaute Funktion, die einen Set-Cookie HTTP-Header an den Browser sendet und ihn auffordert, ein kleines Datenstück zu speichern. Beim nächsten Request sendet der Browser diese Daten zurück – so kann ein zustandsloses Protokoll wie HTTP sich Dinge zwischen Seitenaufrufen "merken", beispielsweise ein „Angemeldet bleiben"-Token, eine Sprachpräferenz oder eine Tracking-ID.
Da ein Cookie ein HTTP-Header ist, muss setcookie() ausgeführt werden, bevor irgendeine Ausgabe an den Browser gesendet wird. Das Cookie selbst steht nicht sofort zur Verfügung; es erscheint im $_COOKIE-Superglobal erst beim nächsten Request, sobald der Browser es zurückgesendet hat.
Wie verwendet man die setcookie() Funktion?
Die Verwendung der Funktion setcookie() ist unkompliziert. Die array-basierte Options-Syntax wurde in PHP 7.3 eingeführt. In PHP 8.1 wurde die veraltete Sieben-Parameter-Positionssyntax als veraltet markiert. Hier ist die moderne Syntax:
Die PHP-Syntax der setcookie() Funktion
setcookie($name, $value, $options);Der Parameter $options ist ein assoziatives Array, das die folgenden Schlüssel akzeptiert:
expires: Die Ablaufzeit des Cookies (Unix-Zeitstempel).path: Der Pfad auf dem Server, auf dem das Cookie verfügbar ist.domain: Die Domain, auf der das Cookie verfügbar ist.secure: Ob das Cookie nur über HTTPS übertragen werden soll.httponly: Ob das Cookie nur über HTTP zugänglich sein soll.samesite: Beschränkt das Cookie auf Same-Site-Requests. Akzeptiert'Strict','Lax'oder'None'. Hinweis: Wenn Sie'None'verwenden, müssen Sie auchsecureauftruesetzen, sonst lehnen moderne Browser das Cookie ab.
Wenn Sie expires weglassen (oder auf 0 setzen), wird das Cookie zu einem Session-Cookie – es lebt nur bis der Browser geschlossen wird. Das Setzen von expires auf einen zukünftigen Zeitstempel macht es zu einem persistenten Cookie, das Browser-Neustarts übersteht.
Hier ist ein Beispiel, wie die Funktion setcookie() zum Setzen eines Cookies verwendet wird:
Wie verwendet man die setcookie() Funktion?
<?php
$options = [
'expires' => time() + (86400 * 30), // 30 days
'path' => '/',
'domain' => '.example.com',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
];
setcookie('username', 'john', $options);In diesem Beispiel verwenden wir die Funktion setcookie(), um ein Cookie namens username mit dem Wert john zu setzen. Wir geben außerdem die Ablaufzeit auf 30 Tage ab der aktuellen Zeit an, den Pfad auf dem Server als /, die Domain als .example.com, und setzen die Flags secure, httponly und samesite, um sicherzustellen, dass das Cookie nur über HTTPS übertragen wird, nicht über client-seitiges Scripting zugänglich ist und auf Same-Site-Requests beschränkt ist.
Cookies lesen
Mit setcookie() gesetzte Cookies sind bei nachfolgenden Seitenaufrufen automatisch im Superglobal-Array $_COOKIE verfügbar. Sie können deren Existenz prüfen und ihre Werte wie folgt lesen:
if (isset($_COOKIE['username'])) {
echo "Welcome, " . htmlspecialchars($_COOKIE['username']);
}Cookies löschen
Um ein Cookie zu löschen, müssen Sie seine Ablaufzeit auf einen vergangenen Zeitstempel setzen. Der Wert kann leer gelassen werden.
setcookie('username', '', [
'expires' => time() - 3600,
'path' => '/',
]);Stellen Sie sicher, dass path (und domain, falls angegeben) mit den Werten übereinstimmen, die Sie beim Erstellen des Cookies verwendet haben. Ein Cookie, das mit path => '/admin' gesetzt wurde, wird nicht durch einen Aufruf mit path => '/' gelöscht, da der Browser diese als unterschiedliche Cookies behandelt.
Wichtige Hinweise
- Rückgabewert:
setcookie()gibttruebei Erfolg undfalsebei Fehler zurück (einschließlich wenn Header bereits gesendet wurden). - Header bereits gesendet: Cookies müssen gesetzt werden, bevor irgendeine Ausgabe an den Browser gesendet wird (einschließlich HTML, Leerzeichen vor
<?phpoderecho). Andernfalls wirft PHP eine Warnung „Headers already sent". Verwenden Sie headers_sent(), um diesen Fall zu erkennen. - Automatische Kodierung:
setcookie()kodiert Cookie-Werte automatisch per URL-Encoding, sodass eine manuelle Kodierung in der Regel nicht notwendig ist. Wenn Sie einen Wert ohne Kodierung speichern müssen, verwenden Sie stattdessen setrawcookie(). - Größenbeschränkungen: Browser begrenzen jedes Cookie auf etwa 4 KB und schränken ein, wie viele Cookies eine einzelne Domain speichern darf. Cookies sind daher für kleine Werte gedacht, nicht für große Datenmengen.
Cookies vs. Sessions
Cookies leben im Browser und werden mit jedem Request gesendet, sodass alles, was Sie speichern, für den Benutzer sichtbar (und von ihm veränderbar) ist. Für sensible Daten speichern Sie nur einen Bezeichner im Cookie und halten Sie die eigentlichen Daten server-seitig mit PHP Sessions. Einen umfassenderen Überblick über die Cookie-Verarbeitung in PHP finden Sie im Kapitel PHP Cookies.
Fazit
Die Funktion setcookie() ist ein nützliches Werkzeug zum Setzen von Cookies in Ihrer PHP-Webanwendung. Wenn Sie die moderne Array-Syntax verstehen, sie vor jeder Ausgabe aufrufen und beim Löschen path/domain korrekt angeben, können Sie Client-seitige Daten zuverlässig verwalten – und wissen, wann Sie stattdessen Sessions verwenden sollten.