Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 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
 
 
 

PHP setcookie() Funktion: Ein umfassender Guide

Sie befinden sich: Home > Php Tutorial > PHP setcookie() von A bis...

PHP setcookie() von A bis Z: Alles, was du wissen musst


Eintrag am:  27.05.2025
Hits / Besucher:  137
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Mit Cookies steuerst du das Nutzerverhalten auf deiner Website und realisierst zentrale Funktionen wie Login oder Personalisierung. Die PHP Funktion setcookie() liefert dir alle Werkzeuge, um Cookies gezielt und sicher einzusetzen. In diesem Artikel zeige ich dir Schritt für Schritt, wie du setcookie() professionell nutzt – von der Basis bis zu den besten Security-Praktiken.

Abstraktes Titelbild mit PHP-Logo, Cookie-Symbol und Browser-Header für setcookie()-Artikel

Inhaltsverzeichnis

Was sind Cookies in PHP?

Cookies ermöglichen es dir, Daten auf dem Rechner des Besuchers zu speichern und beim nächsten Seitenaufruf wieder abzurufen. Im Weballtag sind sie unverzichtbar – vom Warenkorb bis zur Spracheinstellung.

Kurze Definition und Zweck

Cookies sind kleine Textdateien, die der Browser für eine Website ablegt. Sie speichern Nutzerpräferenzen, Sitzungs-IDs oder Tracking-Informationen.

Cookies vs. Sessions (kurze Abgrenzung)

Während Cookies im Browser des Nutzers liegen, verwaltet PHP Sessions serverseitig. Sessions nutzen meist Cookies, um den Nutzer eindeutig zu identifizieren, speichern aber die eigentlichen Daten auf dem Server.

Wie Cookies technisch funktionieren (HTTP-Header)

Cookies werden per HTTP-Header zwischen Server und Browser übertragen.
Jedes Mal, wenn du setcookie() aufrufst, schickt PHP den passenden Set-Cookie-Header – und der Browser legt das Cookie ab.

Die setcookie() Funktion verstehen

Mit setcookie() erzeugst und verwaltest du Cookies direkt in PHP.
Du solltest wissen, wie und wann du die Funktion korrekt aufrufst.

Grundlegende Beschreibung

setcookie() sendet einen HTTP-Header an den Browser, um ein neues Cookie zu speichern oder ein bestehendes zu ändern.

Wichtige Regel: setcookie() muss vor jeglicher Ausgabe aufgerufen werden (Warum? – HTTP-Header)

Da Cookies per HTTP-Header übertragen werden, darf vorher noch keine HTML-Ausgabe oder gar ein Leerzeichen im PHP-Skript erfolgt sein.
Sobald du etwas ausgegeben hast, kann PHP keine Header mehr senden – das ist ein häufiger Fehler.

Lösung für Ausgabe vor setcookie(): Output Buffering (mit Code-Beispiel)

Falls du schon Ausgaben erzeugt hast, kannst du mit Output Buffering arbeiten.
So aktivierst du es in PHP:

ob_start(); 

/** Ausgabe und setcookie() Aufruf hier */

setcookie('sBeispielName', 'sWert');

/** ... weitere Ausgaben ... */

ob_end_flush();

Damit steuerst du, wann die Ausgabe tatsächlich erfolgt und kannst vorher Cookies setzen.

setcookie() Syntax und Parameter im Detail

Für die tägliche Arbeit mit Cookies ist es wichtig, die einzelnen Parameter von setcookie() im Detail zu verstehen.

Funktionssignatur von setcookie()

Die aktuelle Funktionssignatur (Stand: PHP 8.3) sieht wie folgt aus:

setcookie( 

string $sName,

string $sWert = "",

array|int $mAblaufOderOptionen = 0,

string $sPfad = "",

string $sDomain = "",

bool $bSecure = false,

bool $bHttpOnly = false

): bool

Ab PHP 7.3 kannst du das dritte Argument ($mAblaufOderOptionen) als Array übergeben.
Frühere Versionen erwarten einen Integer-Timestamp.

Erklärung aller Parameter

Nachfolgend findest du alle Parameter ausführlich erläutert:

$sName (erforderlich)

Name des Cookies als String.
Keine Leerzeichen oder Steuerzeichen erlaubt.

$sWert (optional, Standard: '')

Der Wert des Cookies als String.
Standardmäßig wird der Wert URL-kodiert. Willst du das verhindern, nutze setrawcookie().

$mAblaufOderOptionen (optional, Standard: 0)

  • Integer: Ein Unix-Timestamp (z. B. time() + 3600 für 1 Stunde ab jetzt).

  • Array: Ab PHP 7.3 kannst du statt eines Zeitstempels ein Array mit Optionen übergeben, etwa:

    [ 

    'expires' => time() + 3600,

    'path' => '/',

    'domain' => '.beispiel.de',

    'secure' => true,

    'httponly' => true,

    'samesite' => 'Strict'

    ]

$sPfad (optional, Standard: '')

Pfad, für den das Cookie gültig ist.
Mit '/' ist das Cookie auf der ganzen Domain verfügbar.

$sDomain (optional, Standard: '')

Domain, für die das Cookie gültig ist.
Mit .beispiel.de kann das Cookie auch Subdomains einschließen.

$bSecure (optional, Standard: false)

Ob das Cookie nur per HTTPS übertragen wird.
Wird empfohlen, wenn du sensible Informationen speicherst.

$bHttpOnly (optional, Standard: false)

Ob das Cookie nur per HTTP(S) und nicht per JavaScript auslesbar ist.
Schützt vor Zugriff durch XSS.

Beispiele für Ablaufzeiten

setcookie('sSessionCookie', 'sWert'); 
/* Gültig bis zum Schließen des Browsers (Session-Cookie) */

setcookie('sStunde', 'sWert', time() + 3600);
/* 1 Stunde */

setcookie('sMonat', 'sWert', time() + 30*24*3600);
/* 30 Tage */

setcookie('sJahr', 'sWert', time() + 365*24*3600);
/* 1 Jahr */

Options-Array ab PHP 7.3

Das Options-Array bietet moderne Cookie-Konfiguration.
Du kannst damit alle wichtigen Attribute (inkl. samesite) direkt setzen:

setcookie('sName', 'sWert', [ 

'expires' => time() + 3600,

'path' => '/',

'domain' => '.beispiel.de',

'secure' => true,

'httponly' => true,

'samesite' => 'Strict'

]);

Bedeutung der einzelnen Optionen

Option Bedeutung Beispiel/Empfehlung
expires Ablaufzeit als Unix-Timestamp time() + 3600
path Gültigkeitspfad / (für gesamte Domain)
domain Gültigkeitsdomain .deinedomain.de
secure Nur per HTTPS senden true (bei HTTPS empfohlen)
httponly Nur per HTTP/HTTPS, nicht aus JavaScript true (für Sicherheit)
samesite CSRF-Schutz (None, Lax, Strict) Lax oder Strict

Praktische Beispiele zur Verwendung von setcookie()

Beispiele erleichtern das Verständnis und zeigen den praktischen Einsatz der Funktion.

setcookie('sBenutzername', 'MaxMustermann'); 

/** Setzt ein Session-Cookie mit dem Namen sBenutzername und dem Wert MaxMustermann */
setcookie('sSprache', 'de', time() + 365*24*3600); 

/** Cookie für ein Jahr speichern */
setcookie('sGlobal', '1', time() + 3600, '/'); 

/** Das Cookie ist auf allen Seiten verfügbar */
setcookie('sLogin', 'wert123', time() + 3600, '/', '', true); 

/** Cookie nur über HTTPS senden */
setcookie('sToken', 'abc', time() + 3600, '/', '', false, true); 

/** Cookie ist nicht per JavaScript auslesbar */
setcookie('sAuth', 'xyz', [ 

'expires' => time() + 3600,

'path' => '/',

'secure' => true,

'httponly' => true,

'samesite' => 'Strict'

]);

/** Modern, flexibel und sicher */

Beispiel 7: Array-Cookies setzen

setcookie('aWarenkorb[0]', 'Apfel'); 

setcookie('aWarenkorb[1]', 'Birne');

/** PHP liest diese Werte als Array aus */

Cookies stehen dir in PHP im globalen Array $_COOKIE zur Verfügung.
Du greifst einfach wie bei einem assoziativen Array darauf zu.

if (isset($_COOKIE['sBenutzername'])) { 

$sBenutzer = $_COOKIE['sBenutzername'];

/* Jetzt kannst du mit $sBenutzer weiterarbeiten */

}

Beispiel: Alle Cookies lesen

print_r($_COOKIE); 

/** Zeigt alle Cookies als Array */

Wichtiger Hinweis: Cookies sind erst nach dem nächsten Seitenaufruf verfügbar

Nachdem du ein Cookie mit setcookie() gesetzt hast, steht es im gleichen Request noch nicht in $_COOKIE bereit. Erst beim nächsten Seitenaufruf kannst du es lesen.

Mit isset() testest du, ob das Cookie im Browser angekommen ist:

if (isset($_COOKIE['sLogin'])) { 

/* Benutzer ist eingeloggt */

}

Cookies löschen

Cookies entfernst du, indem du sie mit setcookie() und einem Verfallsdatum in der Vergangenheit neu setzt.
Das Cookie verschwindet dann beim nächsten Seitenaufruf.

Die Methode: setcookie() mit Verfallsdatum in der Vergangenheit

setcookie('sLogin', '', time() - 3600, '/'); 

/** Das Cookie ist gelöscht */

Wichtiger Hinweis: Zum Löschen die GLEICHEN Parameter (Pfad, Domain) verwenden wie beim Setzen

Nur wenn du dieselben Werte für Pfad und Domain wie beim Setzen benutzt, wird das Cookie auch wirklich gelöscht.

setcookie('sBenutzername', '', time() - 3600, '/'); 

Beispiel: Alle Cookies löschen (Konzept und Herausforderungen)

Du kannst alle Cookies aus $_COOKIE iterieren und einzeln löschen:

foreach ($_COOKIE as $sName => $sWert) { 

setcookie($sName, '', time() - 3600, '/');

}

Achtung: Array-Cookies (wie aWarenkorb[0]) musst du einzeln ansprechen.

setcookie() vs. setrawcookie()

In manchen Fällen willst du verhindern, dass PHP Werte automatisch URL-kodiert. Dafür gibt es setrawcookie().

Wann setrawcookie() verwenden? (Keine automatische URL-Kodierung)

setrawcookie() speichert Werte im Original – praktisch z.B. bei schon kodierten Strings oder speziellen Zeichen.

Kurzes Code-Beispiel

setrawcookie('sRoherWert', 'Ein Wert mit Sonderzeichen!@#', time() + 3600); 

/** Keine automatische Kodierung */

Sicherheit und Best Practices bei der Verwendung von Cookies

Ein verantwortungsvoller Umgang mit Cookies ist Pflicht, gerade wenn du mit Nutzerdaten arbeitest.
Hier die wichtigsten Tipps aus der Praxis:

  • Keine sensiblen Daten direkt in Cookies speichern

    • Speichere niemals Passwörter, Zahlungsdaten oder ähnliche Infos direkt im Cookie. Nutze stattdessen eine ID und lagere Daten serverseitig.
  • Keine sensiblen Daten direkt in Cookies speichern

    • Speichere niemals Passwörter, Zahlungsdaten oder ähnliche Infos direkt im Cookie. Nutze stattdessen eine ID und lagere Daten serverseitig.
  • Verwendung von secure für HTTPS

    • Cookies, die sensible Infos enthalten, sollten immer mit secure:true gesetzt werden – sonst sind sie abgreifbar.
  • Verwendung von httponly zur Minderung von XSS-Risiken

    • Mit httponly:true schützt du dich vor JavaScript-Zugriff auf Cookies. Das mindert das Risiko für Session-Diebstahl über Cross-Site-Scripting.
  • Implementierung des samesite Attributes

    • Nutze samesite, um CSRF-Angriffe zu erschweren. “Lax” ist ein guter Standard, “Strict” blockiert fast alle fremden Requests.
  • Regelmäßige Überprüfung und Löschung nicht benötigter Cookies

    • Halte deine Cookies schlank. Entferne regelmäßig alles, was nicht mehr gebraucht wird.
  • Umgang mit der EU-Cookie-Richtlinie (kurzer Hinweis, keine Rechtsberatung)

    • Beachte: Nutzer müssen über Cookies informiert werden. Rechtliche Hinweise und Consent-Mechanismen sind Pflicht. Informiere dich, was in deinem Land gilt.

Häufige Fehler und Fehlerbehebung

Auch erfahrene Entwickler tappen regelmäßig in dieselben Fallen. Hier findest du die Klassiker – und wie du sie löst.

  • "Headers already sent" Fehler (Verweis auf Abschnitt 2)

    • Du hast vor setcookie() schon ausgegeben? Siehe “Output Buffering”.
      Immer vor jeglicher Ausgabe arbeiten!
  • Cookies sind nicht auf anderen Seiten verfügbar (Pfad-Problem)

    • Setze path auf '/' für seitenweite Verfügbarkeit. Cookies mit dem Standardpfad gelten nur für das aktuelle Verzeichnis.
  • Cookies werden nicht gesetzt (Browser-Einstellungen, Fehler im Code)

    • Viele Browser blockieren Cookies, z.B. im Inkognito-Modus. Prüfe außerdem, ob du setcookie() korrekt vor Ausgaben aufrufst.
  • Cookies werden nicht gelöscht (falsche Parameter beim Löschen)

    • Zum Löschen musst du exakt dieselben Werte für path und domain wie beim Setzen angeben.

Fazit

Mit PHP setcookie() hast du ein mächtiges Werkzeug, um Nutzererlebnisse zu gestalten und die Funktionalität deiner Website gezielt zu steuern. Wer sich mit den Parametern, Sicherheitsmechanismen und Besonderheiten (wie samesite oder Output Buffering) auseinandersetzt, spart später viel Zeit bei Fehlersuche und Optimierung. Mein Tipp: Experimentiere in einer Testumgebung mit allen Parametern, um die Auswirkungen zu verstehen – und vergiss nie, die Sicherheit deiner Cookies im Blick zu behalten.

 


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.