Signatur
Beschreibung
session_gc() löst die Garbage Collection des konfigurierten Session-Handlers manuell aus. Dabei werden alle abgelaufenen Session-Daten entfernt, deren Lebensdauer (session.gc_maxlifetime) überschritten wurde.
Standardmäßig führt PHP die Session-GC probabilistisch durch, gesteuert über session.gc_probability und session.gc_divisor. Auf Produktivsystemen mit hohem Traffic kann dies dazu führen, dass veraltete Sessions lange bestehen bleiben oder der GC-Lauf zufällig eine Benutzeranfrage stark verlangsamt. Mit session_gc() lässt sich die GC stattdessen gezielt — z. B. in einem Cronjob — und damit vorhersehbar ausführen.
Die Funktion setzt voraus, dass eine Session gestartet wurde (session_start()) oder der verwendete Session-Handler anderweitig initialisiert ist. Die Rückgabe ist die Anzahl der tatsächlich gelöschten Session-Datensätze, oder false bei einem Fehler. Nicht alle Session-Handler (z. B. benutzerdefinierte Handler) unterstützen eine genaue Rückgabe der Löschanzahl.
Besonders empfehlenswert ist der Einsatz in Kombination mit session.gc_probability = 0, um die automatische probabilistische GC vollständig zu deaktivieren und durch einen geplanten Aufruf von session_gc() zu ersetzen.
Rückgabewert
false zurück, wenn ein Fehler aufgetreten ist oder der Session-Handler keine Rückgabe unterstützt.Beispiele
Manuelle GC nach Session-Start
<?php
session_start();
$deleted = session_gc();
if ($deleted === false) {
echo 'Garbage Collection fehlgeschlagen oder nicht unterstützt.';
} else {
echo 'Gelöschte abgelaufene Sessions: ' . $deleted;
}
GC per Cronjob mit deaktivierter probabilistischer GC
<?php
// In php.ini oder per ini_set:
// session.gc_probability = 0 <- automatische GC deaktiviert
// session.gc_maxlifetime = 1440
// Dieses Skript wird z. B. minütlich per Cronjob aufgerufen:
session_start();
$start = microtime(true);
$deleted = session_gc();
$elapsed = round((microtime(true) - $start) * 1000, 2);
echo sprintf(
'[%s] Session-GC abgeschlossen: %d Sessions gelöscht in %s ms.' . PHP_EOL,
date('Y-m-d H:i:s'),
$deleted === false ? 0 : $deleted,
$elapsed
);
session_write_close();
// Wichtig · Fallstricke
Kompatibilität mit Session-Handlern: Benutzerdefinierte Session-Handler, die über session_set_save_handler() registriert wurden, müssen die GC-Methode (gc) korrekt implementieren und einen sinnvollen Rückgabewert liefern, damit session_gc() korrekt funktioniert. Handler, die false oder 0 zurückliefern, können zu Fehlinterpretationen führen.
Performance: Bei Datenbankbasierten Session-Handlern mit sehr vielen Sessions kann die GC spürbar lange dauern. Der Einsatz per Cronjob schützt normale Benutzeranfragen vor dieser Latenz.
Voraussetzung: Die Funktion steht erst ab PHP 7.1.0 zur Verfügung. In älteren PHP-Versionen muss die GC ausschließlich über die probabilistischen INI-Einstellungen gesteuert werden.