Start · Sprachen · PHP · Referenz · session_cache_limiter

session_cache_limiter

Funktion

Liest oder setzt den Cache-Limiter der aktuellen Session, der steuert, welche HTTP-Cache-Header für Session-Seiten gesendet werden.

seit PHP 4.0.0 Kategorie: http

Signatur

session_cache_limiter(?string $value = null): string|false

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- und Pragma: no-cache-Header.
  • private: Erlaubt Caching nur im Browser des Nutzers, nicht in gemeinsam genutzten Proxys. Setzt Cache-Control: private und Expires auf ein Datum in der Vergangenheit.
  • private_no_expire: Wie private, sendet aber keinen Expires-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

Typ
string|false
Beschreibung
Gibt den Namen des aktuellen (alten) Cache-Limiters als String zurück – also den Wert vor der Änderung, falls ein neuer Wert gesetzt wurde. Gibt 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;
Alter Cache-Limiter: nocache Aktueller Cache-Limiter: private_no_expire

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();
Session ID: abc123...

Aktuellen Cache-Limiter lesen ohne Änderung

<?php
// php.ini-Standardwert auslesen
$limiter = session_cache_limiter(null);
echo 'Konfigurierter Cache-Limiter: ' . $limiter . PHP_EOL;
Konfigurierter Cache-Limiter: nocache

// 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.