Signatur
Beschreibung
session_cache_limiter() steuert, welche Cache-bezogenen HTTP-Header PHP zusammen mit Session-Daten sendet. Der Cache-Limiter legt fest, wie Browser und Proxys die Seite zwischenspeichern dürfen. Mögliche Werte sind public, private, private_no_expire, nocache und der leere String '' (kein automatischer Header).
- nocache (Standard): Verhindert jegliches Caching – sendet
Expires-,Cache-Control- undPragma: no-cache-Header. - private: Erlaubt Caching nur im Browser des Nutzers, nicht in gemeinsam genutzten Proxys. Setzt
Cache-Control: privateundExpiresauf ein Datum in der Vergangenheit. - private_no_expire: Wie
private, sendet aber keinenExpires-Header – nützlich, um Probleme mit bestimmten Browsern zu vermeiden. - public: Erlaubt Caching durch Browser und Proxys.
- '' (leerer String): PHP sendet keine Cache-Header; der Entwickler übernimmt selbst die Kontrolle.
Die Funktion muss vor dem Aufruf von session_start() aufgerufen werden, da die Cache-Header beim Starten der Session gesendet werden. Ein nachträglicher Aufruf hat keine Wirkung mehr, wenn Header bereits versendet wurden. Der Wert wird initial durch die php.ini-Direktive session.cache_limiter bestimmt.
Wird null (oder kein Argument) übergeben, gibt die Funktion den aktuellen Wert zurück, ohne ihn zu ändern. Diese Eigenschaft eignet sich gut, um den aktuellen Status zu lesen und bei Bedarf gezielt zu überschreiben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string|null | null | Der gewünschte Cache-Limiter-Wert. Erlaubte Werte: 'nocache', 'public', 'private', 'private_no_expire' oder '' (leerer String). Wird null übergeben oder kein Argument angegeben, wird der aktuelle Wert nur gelesen, nicht geändert. |
Rückgabewert
false zurück, wenn die Session noch nicht initialisiert ist und der Wert daher nicht gelesen werden kann (PHP 8.0+).Beispiele
Cache-Limiter vor session_start() setzen
<?php
// Vor session_start() aufrufen, damit die richtigen Header gesendet werden
$alter_wert = session_cache_limiter('private_no_expire');
echo 'Alter Cache-Limiter: ' . $alter_wert . PHP_EOL;
session_start();
// Ab hier wird Cache-Control: private gesendet, ohne Expires-Header
echo 'Aktueller Cache-Limiter: ' . session_cache_limiter() . PHP_EOL;
Cache-Header vollständig deaktivieren und manuell setzen
<?php
// Automatische Cache-Header von PHP deaktivieren
session_cache_limiter('');
session_start();
// Jetzt eigene Cache-Header definieren
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
echo 'Session ID: ' . session_id();
Aktuellen Cache-Limiter lesen ohne Änderung
<?php
// php.ini-Standardwert auslesen
$limiter = session_cache_limiter(null);
echo 'Konfigurierter Cache-Limiter: ' . $limiter . PHP_EOL;
// Wichtig · Fallstricke
Reihenfolge beachten: session_cache_limiter() muss zwingend vor session_start() aufgerufen werden. Nach dem Start der Session und dem Senden der Header ist eine Änderung wirkungslos und führt je nach Konfiguration zu einem E_WARNING.
Ab PHP 8.0 gibt die Funktion false zurück, wenn keine Session aktiv ist und der Wert nicht bestimmbar ist. In älteren PHP-Versionen wurde in solchen Fällen ein leerer String zurückgegeben.
Der Wert private setzt einen Expires-Header in der Vergangenheit, was bei einigen Browsern dazu führen kann, dass beim Zurücknavigieren eine Warnung über abgelaufene Daten erscheint. private_no_expire ist in der Praxis oft die bessere Wahl für angemeldete Benutzer.