Start · Sprachen · PHP · Referenz · session_set_cookie_params

session_set_cookie_params

Funktion

Setzt die Parameter des Session-Cookies, bevor die Session gestartet wird.

seit PHP 4.0.0 Kategorie: http

Signatur

session_set_cookie_params(int|array $lifetime_or_options, string $path = '/', string $domain = '', bool $secure = false, bool $httponly = false): bool

Beschreibung

session_set_cookie_params() erlaubt es, die Eigenschaften des Session-Cookies zu konfigurieren, bevor session_start() aufgerufen wird. Damit lassen sich Lebensdauer, Pfad, Domain, HTTPS-Beschränkung und HttpOnly-Flag des Cookies gezielt anpassen.

Ab PHP 7.3 kann der erste Parameter statt einer ganzen Zahl auch ein assoziatives Array sein, das alle Optionen auf einmal enthält – inklusive des neuen samesite-Schlüssels (z. B. 'Strict', 'Lax' oder 'None'). Diese Array-Variante ist der empfohlene Weg für modernen Code, da sie zukunftssicher und übersichtlicher ist.

Die Funktion muss vor dem Aufruf von session_start() aufgerufen werden, da der Cookie erst beim Starten der Session gesetzt wird. Alternativ können dieselben Einstellungen dauerhaft in der php.ini vorgenommen werden.

  • lifetime: Sekunden bis zum Ablauf (0 = bis Browserschluss)
  • secure: Cookie nur über HTTPS übertragen
  • httponly: Cookie nicht über JavaScript erreichbar
  • samesite: Schutz vor Cross-Site-Request-Forgery (ab PHP 7.3)

Parameter

Name Typ Default Beschreibung
$lifetime_or_options Pflicht int|array Als int: Lebensdauer des Cookies in Sekunden (0 = bis zum Schließen des Browsers). Ab PHP 7.3 kann hier ein assoziatives Array mit den Schlüsseln lifetime, path, domain, secure, httponly und samesite übergeben werden.
$path string / Der Pfad auf dem Server, für den der Cookie gültig ist. '/' bedeutet, dass der Cookie für die gesamte Domain gilt. Wird ignoriert, wenn lifetime_or_options ein Array ist.
$domain string Die (Sub-)Domain, für die der Cookie gültig ist, z. B. '.example.com' für alle Subdomains. Wird ignoriert, wenn lifetime_or_options ein Array ist.
$secure bool false Wenn true, wird der Cookie nur über HTTPS-Verbindungen gesendet. Wird ignoriert, wenn lifetime_or_options ein Array ist.
$httponly bool false Wenn true, ist der Cookie nicht über JavaScript (z. B. document.cookie) zugänglich, was XSS-Angriffe erschwert. Wird ignoriert, wenn lifetime_or_options ein Array ist.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Session bereits aktiv ist).

Beispiele

Klassische Variante (PHP 5/7): Sicheres Session-Cookie setzen

<?php
// Cookie-Parameter vor dem Session-Start setzen
session_set_cookie_params(
    1800,       // 30 Minuten Lebensdauer
    '/',        // gültig für die gesamte Domain
    '',         // aktuelle Domain
    true,       // nur über HTTPS
    true        // nicht per JavaScript erreichbar
);

session_start();

$_SESSION['user_id'] = 42;
echo 'Session gestartet mit sicheren Cookie-Parametern.';
Session gestartet mit sicheren Cookie-Parametern.

Array-Variante (ab PHP 7.3): Inklusive SameSite-Attribut

<?php
// Empfohlene Array-Variante ab PHP 7.3
session_set_cookie_params([
    'lifetime' => 1800,
    'path'     => '/',
    'domain'   => '.example.com',
    'secure'   => true,
    'httponly' => true,
    'samesite' => 'Lax',   // Schutz vor CSRF
]);

session_start();

$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
echo 'Sichere Session mit SameSite=Lax gestartet.';
Sichere Session mit SameSite=Lax gestartet.

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Setze secure auf true in Produktionsumgebungen, die ausschließlich HTTPS verwenden, um Session-Hijacking über unverschlüsselte Verbindungen zu verhindern.
  • Das httponly-Flag sollte grundsätzlich aktiviert sein, um XSS-Angriffe zu erschweren, die auf den Session-Cookie abzielen.
  • Das samesite-Attribut (Array-Variante, ab PHP 7.3) bietet einen wirksamen Schutz vor Cross-Site-Request-Forgery (CSRF). 'Lax' ist für die meisten Anwendungen ein guter Kompromiss; 'Strict' ist restriktiver.
  • Wichtig: Die Funktion muss vor session_start() aufgerufen werden. Ein Aufruf danach hat keine Wirkung und gibt false zurück.
  • Die gesetzten Werte gelten nur für die aktuelle Anfrage und überschreiben die Einstellungen aus der php.ini (session.cookie_lifetime, session.cookie_path usw.) temporär.