Signatur
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
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.';
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.';
// Wichtig · Fallstricke
Sicherheitshinweise:
- Setze
secureauftruein 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 gibtfalsezurück. - Die gesetzten Werte gelten nur für die aktuelle Anfrage und überschreiben die Einstellungen aus der
php.ini(session.cookie_lifetime,session.cookie_pathusw.) temporär.