W3docs

PHP Cookies

PHP Cookies sind kleine Textdateien auf dem Client, die Nutzerdaten wie Einstellungen oder Sitzungskennungen speichern. Hier erfahren Sie, wie Sie sie erstellen, lesen und löschen.

Einführung in PHP Cookies

PHP Cookies sind kleine Textdateien, die clientseitig gespeichert werden und Daten über das Verhalten und die Einstellungen des Nutzers enthalten. Sie werden häufig verwendet, um Informationen wie Nutzerpräferenzen, Warenkorbinhalte oder Sitzungskennungen zu speichern.

In diesem Artikel werden wir uns mit den Grundlagen von PHP Cookies befassen und zeigen, wie sie in einer Website eingesetzt werden können.

Was sind PHP Cookies?

Ein Cookie ist ein kleines Datenstück, das von einer Website auf dem Gerät des Nutzers gespeichert wird. Anders als serverseitige Sessions befinden sich Cookies vollständig auf dem Client, was sie ideal für leichtgewichtige, persistente Daten wie Einstellungen oder Tracking-Token macht. PHP erstellt Cookies mit der Funktion setcookie() und greift über das $_COOKIE-Superglobal-Array darauf zu. Die Funktion setcookie() akzeptiert mehrere Argumente, darunter den Cookie-Namen, den Wert, die Ablaufzeit, den Pfad, die Domain und Sicherheits-Flags.

So funktioniert es in der Praxis:

  1. Der Server sendet ein Cookie. Wenn Sie setcookie() aufrufen, fügt PHP einen Set-Cookie-HTTP-Antwortheader hinzu. Der Browser speichert das Cookie.
  2. Der Browser sendet es zurück. Bei jeder nachfolgenden Anfrage an dieselbe Domain hängt der Browser das Cookie automatisch im Cookie-Anfrage-Header an.
  3. PHP liest es aus. PHP parst eingehende Cookies in das $_COOKIE-Array, sodass Sie sie beim nächsten Seitenaufruf lesen können.

Cookies vs. Sessions

CookiesSessions
Wo die Daten gespeichert sindClient (Browser)Server
Überlebt Browser-NeustartJa (wenn expire in der Zukunft liegt)Nur mit einem persistenten Session-Cookie
Größenlimit~4 KB pro CookieBegrenzt durch Serverspeicher
Geeignet fürEinstellungen, „Angemeldet bleiben", nicht sensible FlagsAnmeldestatus, sensible Daten

Verwenden Sie Cookies für kleine, nicht sensible Daten, die auf dem Client persistent sein müssen. Verwenden Sie Sessions, wenn die Daten sensibel oder umfangreich sind.

PHP Cookies erstellen

Um ein PHP Cookie zu erstellen, verwenden Sie die Funktion setcookie(). Die grundlegende Syntax der Funktion setcookie() lautet wie folgt:

PHP setcookie-Funktionssyntax

setcookie(name, value, expire, path, domain, secure, httponly);

Dabei gilt:

  • name ist der Name des Cookies
  • value ist der im Cookie zu speichernde Wert
  • expire ist der Zeitpunkt, nach dem das Cookie abläuft
  • path ist der Pfad auf dem Server, auf dem das Cookie verfügbar ist
  • domain ist der Domainname der Website
  • secure gibt an, ob das Cookie nur über eine sichere (HTTPS)-Verbindung gesendet werden soll
  • httponly gibt an, ob das Cookie vor JavaScript (document.cookie) verborgen werden soll, was vor XSS-Angriffen schützt

Hier ist ein Beispiel dafür, wie ein PHP Cookie erstellt wird:

Einfaches PHP-Beispiel zum Hinzufügen eines Cookies

setcookie("user", "John Doe", time() + 3600, "/");

Dieser Code erstellt ein Cookie namens user mit dem Wert John Doe, das in einer Stunde abläuft (time() gibt den aktuellen Unix-Zeitstempel in Sekunden zurück, das Addieren von 3600 setzt das Ablaufdatum eine Stunde vor). Der Pfad "/" macht das Cookie auf der gesamten Website verfügbar.

Warnung

setcookie() sendet einen HTTP-Header und muss daher vor jeglicher Ausgabe aufgerufen werden — kein HTML, Leerzeichen oder echo davor. Wenn die Ausgabe bereits gestartet wurde, erhalten Sie eine Warnung „headers already sent" und das Cookie wird nicht gesetzt. Siehe headers_sent(), um dies zu erkennen.

Die moderne Array-Syntax (PHP 7.3+)

Seit PHP 7.3 können Sie anstelle von positional Arguments ein Options-Array übergeben. Dies ist die empfohlene Form, da Sie damit samesite setzen können, das steuert, ob das Cookie bei Cross-Site-Anfragen gesendet wird (eine wichtige CSRF-Schutzmaßnahme):

setcookie("user", "John Doe", [
    "expires" => time() + 3600,
    "path" => "/",
    "secure" => true,     // only over HTTPS
    "httponly" => true,   // not readable by JavaScript
    "samesite" => "Lax",  // "Strict", "Lax", or "None"
]);

PHP Cookies auslesen

Sobald ein Cookie erstellt wurde, kann sein Wert über das Superglobal-Array $_COOKIE abgerufen werden. Die grundlegende Syntax für den Zugriff auf einen Cookie-Wert lautet wie folgt:

PHP: Cookie-Wert auslesen

$_COOKIE['name'];

Dabei ist name der Name des Cookies.

Hier ist ein Beispiel dafür, wie ein Cookie-Wert abgerufen wird:

PHP: Auf Cookie-Wert zugreifen

if (isset($_COOKIE["user"])) {
    echo "Welcome back, " . $_COOKIE["user"];
} else {
    echo "Welcome, guest!";
}

Prüfen Sie immer mit isset(), bevor Sie ein Cookie lesen. Ein Cookie, das in der aktuellen Anfrage gesetzt wurde, ist in $_COOKIE erst beim nächsten Seitenaufruf verfügbar, da der Browser es erst bei der folgenden Anfrage zurücksendet. Das Lesen eines soeben gesetzten Cookies im gleichen Skript liefert nichts zurück.

Info

Cookie-Werte kommen als nicht vertrauenswürdige Benutzereingaben an — jeder kann sie im Browser bearbeiten. Validieren und bereinigen Sie sie vor der Verwendung, zum Beispiel mit filter_var(). Vertrauen Sie einem Cookie-Wert niemals allein für Autorisierungsentscheidungen.

PHP Cookies aktualisieren

Um ein PHP Cookie zu aktualisieren, erstellen Sie einfach ein neues Cookie mit demselben Namen und einem neuen Wert. Die Ablaufzeit sollte ebenfalls aktualisiert werden, damit das Cookie weiterhin bestehen bleibt.

Hier ist ein Beispiel dafür, wie ein PHP Cookie aktualisiert wird:

Beispiel für die Aktualisierung eines Cookies

setcookie("user", "Jane Doe", time()+3600, "/", "", 0, 0);

Dieser Code aktualisiert das Cookie user mit dem neuen Wert Jane Doe und verlängert seine Ablaufzeit um eine weitere Stunde.

PHP Cookies löschen

Um ein PHP Cookie zu löschen, erstellen Sie einfach ein neues Cookie mit demselben Namen und einer Ablaufzeit in der Vergangenheit. Dadurch wird das Cookie automatisch vom Gerät des Nutzers gelöscht.

Hier ist ein Beispiel dafür, wie ein PHP Cookie gelöscht wird:

Beispiel für das Löschen eines Cookies

setcookie("user", "", time()-3600, "/", "", 0, 0);

Dieser Code erstellt ein neues user-Cookie mit einer Ablaufzeit, die eine Stunde in der Vergangenheit liegt. Dadurch wird das Cookie automatisch vom Gerät des Nutzers gelöscht.

Warnung

Um ein Cookie zu löschen, müssen Sie denselben path (und dieselbe domain) wie beim Erstellen angeben. Ein Cookie mit Pfad /account ist ein anderes Cookie als eines mit Pfad /, und das Löschen des falschen Pfads lässt das Original bestehen.

Ein vollständiges Beispiel: Eine Theme-Präferenz merken

Um alles zusammenzuführen, hier ein kleines Skript, mit dem ein Besucher ein Farbthema auswählen kann, das mithilfe eines Cookies über Besuche hinweg gespeichert wird:

<?php
// 1. Save the choice when the form is submitted
if (isset($_POST["theme"])) {
    setcookie("theme", $_POST["theme"], time() + 60 * 60 * 24 * 30, "/"); // 30 days
    // Reload so the new cookie is available to $_COOKIE
    header("Location: " . $_SERVER["PHP_SELF"]);
    exit;
}

// 2. Read the saved choice (default to "light")
$theme = isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : "light";
?>
<p>Current theme: <?= htmlspecialchars($theme) ?></p>

<form method="post">
    <button name="theme" value="light">Light</button>
    <button name="theme" value="dark">Dark</button>
</form>

Beachten Sie, wie das Skript nach dem Speichern weiterleitet, damit das frisch gesetzte Cookie bei der nächsten Anfrage gelesen wird, und wie htmlspecialchars() den Wert vor der Ausgabe escapet. Weitere Informationen zur sicheren Verarbeitung von $_POST-Daten finden Sie unter PHP-Formularverarbeitung.

Vorteile der Verwendung von PHP Cookies

PHP Cookies haben mehrere Vorteile, darunter:

  1. Verbesserte Benutzererfahrung: Cookies ermöglichen es Websites, nutzerspezifische Informationen wie Präferenzen und Anmeldedaten zu speichern, die für eine personalisiertere Benutzererfahrung genutzt werden können.
  2. Persistente Daten: Cookies ermöglichen es Websites, Daten auf dem Gerät des Nutzers zu speichern, die auch nach dem Schließen des Browsers oder dem Ausschalten des Geräts bestehen bleiben. Dadurch können Websites die Präferenzen und Anmeldedaten eines Nutzers über mehrere Besuche hinweg speichern.
  3. Einfache Implementierung: PHP Cookies sind einfach zu implementieren und können zur Speicherung einer Vielzahl von Daten verwendet werden, was sie zu einem vielseitigen Werkzeug für Website-Entwickler macht.

Best Practices für die Verwendung von PHP Cookies

Um die bestmögliche Benutzererfahrung und Sicherheit zu gewährleisten, ist es wichtig, beim Einsatz von PHP Cookies Best Practices zu befolgen. Einige dieser Best Practices sind:

  1. Sichere Verbindungen verwenden: Verwenden Sie nach Möglichkeit sichere Verbindungen (HTTPS) beim Erstellen und Zugreifen auf Cookies. Dies schützt die in Cookies gespeicherten Daten vor dem Abfangen durch Dritte.
  2. Sensible Daten sicher speichern: Speichern Sie keine sensiblen Daten wie Anmeldedaten oder Passwörter in Cookies. Da Cookies clientseitig gespeichert werden, sind sie anfällig für Diebstahl oder Manipulation. Verwenden Sie stattdessen serverseitige Sessions ($_SESSION) für sensible Authentifizierungsdaten.
  3. Eindeutige Cookie-Namen verwenden: Verwenden Sie eindeutige und beschreibende Namen für Ihre Cookies, um Konflikte mit anderen Cookies Ihrer Website oder anderer Websites zu vermeiden.
  4. Datenmenge begrenzen: Begrenzen Sie die in Cookies gespeicherte Datenmenge auf das Notwendige. Große Datenmengen können die Website-Performance beeinträchtigen und das Risiko von Datenpannen erhöhen.

Fazit

PHP Cookies sind ein leistungsstarkes Werkzeug für Website-Entwickler, mit dem sie Daten auf dem Gerät des Nutzers speichern und abrufen können. Durch das Befolgen von Best Practices und die Berücksichtigung von Sicherheitsaspekten können PHP Cookies eingesetzt werden, um eine bessere Benutzererfahrung zu bieten und die Funktionalität der Website zu steigern.

Übung

Übung
Was trifft laut den Informationen auf dieser Seite auf PHP Cookies zu?
Was trifft laut den Informationen auf dieser Seite auf PHP Cookies zu?
Was this page helpful?