Signatur
Beschreibung
session_cache_expire() steuert, wie lange Seiten, die Session-Daten ausliefern, im Browser-Cache des Clients gültig bleiben sollen. Der Wert wird in Minuten angegeben und beeinflusst den HTTP-Header Expires sowie Cache-Control: max-age, die PHP beim Starten einer Session automatisch sendet – sofern session.cache_limiter nicht auf nocache gesetzt ist.
Ohne Argument gibt die Funktion den aktuell konfigurierten Wert zurück (Standard: 180 Minuten). Wird ein ganzzahliger Wert übergeben, wird die Einstellung für die aktuelle Anfrage geändert und der vorherige Wert zurückgegeben. Der neue Wert entspricht dem INI-Eintrag session.cache_expire.
Die Funktion muss vor dem Aufruf von session_start() aufgerufen werden, da die HTTP-Header erst beim Start der Session gesendet werden. Eine spätere Änderung hat keine Wirkung auf die bereits versendeten Header.
Relevant ist diese Funktion vor allem dann, wenn der Cache-Limiter auf public oder private steht. Bei nocache oder private_no_expire wird kein Expires-Header gesendet, sodass die Verfallszeit keine praktische Auswirkung hat.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | int|null | null | Neue Cache-Verfallszeit in Minuten. Wird null oder kein Wert übergeben, bleibt die aktuelle Einstellung unverändert und es wird nur der aktuelle Wert zurückgegeben. |
Rückgabewert
false zurück, wenn die Session bereits gestartet wurde und der Wert nicht mehr geändert werden kann.Beispiele
Aktuelle Cache-Verfallszeit auslesen
<?php
// Vor session_start() aufrufen
$expire = session_cache_expire();
echo 'Aktuelle Cache-Verfallszeit: ' . $expire . ' Minuten';
session_start();
Cache-Verfallszeit auf 60 Minuten setzen
<?php
// Cache-Limiter auf 'public' setzen, damit Expires-Header gesendet wird
session_cache_limiter('public');
// Verfallszeit auf 60 Minuten setzen (vorher: 180)
$vorheriger_wert = session_cache_expire(60);
echo 'Vorheriger Wert: ' . $vorheriger_wert . ' Minuten' . PHP_EOL;
echo 'Neuer Wert: ' . session_cache_expire() . ' Minuten' . PHP_EOL;
session_start();
// Ab hier werden entsprechende Cache-Control- und Expires-Header gesendet
Keine Caching-Verfallszeit bei nocache-Limiter
<?php
// nocache verhindert jegliches Caching – cache_expire hat dann keine Wirkung
session_cache_limiter('nocache');
session_cache_expire(120); // Wird ignoriert, da nocache aktiv
session_start();
// Gesendete Header:
// Cache-Control: no-store, no-cache, must-revalidate
// Pragma: no-cache
// Es wird KEIN Expires-Header gesendet
// Wichtig · Fallstricke
Reihenfolge beachten: session_cache_expire() muss zwingend vor session_start() aufgerufen werden. Andernfalls sind die HTTP-Header bereits gesendet und die Funktion gibt false zurück, ohne etwas zu ändern.
Der gesetzte Wert gilt nur für die aktuelle Anfrage und wird nicht dauerhaft in der php.ini gespeichert. Für dauerhafte Änderungen muss session.cache_expire in der php.ini oder per ini_set() vor session_start() angepasst werden.
Sicherheitshinweis: Sehr lange Cache-Zeiten bei öffentlichen Seiten können dazu führen, dass sensible Session-bezogene Inhalte im Browser-Cache verbleiben, selbst nachdem der Benutzer sich ausgeloggt hat. Für sensible Bereiche empfiehlt sich session_cache_limiter('nocache').