(PHP 7 >= 7.1.0, PHP 8)
session_gc — Führt die Garbage Collection der Session-Daten durch
session_gc() wird verwendet, um die GC (Garbage Collection) der Session-Daten durchzuführen. PHP führt standardmäßig eine wahrscheinlichkeitsbasierte Session-GC durch.
Die wahrscheinlichkeitsbasierte GC funktioniert einigermaßen, bringt aber einige Probleme mit sich. 1) Die Session-Daten von Websites mit geringem Datenverkehr werden möglicherweise nicht innerhalb der gewünschten Frist gelöscht. 2) Bei Websites mit hohem Datenverkehr kann die GC zu häufig erfolgen. 3) Die GC wird durchgeführt, während eine Anfrage des Benutzers bearbeitet wird, was zu einer zusätzlichen Verzögerung für den Benutzer führt.
Daher wird empfohlen, die GC auf Produktivsystemen regelmäßig auszuführen, bei UNIX-ähnlichen Systemen z. B. mit "cron". Es ist sicherzustellen, dass die wahrscheinlichkeitsbasierte GC deaktiviert ist, indem session.gc_probability auf 0 gesetzt wird.
Diese Funktion besitzt keine Parameter.
session_gc() gibt bei Erfolg die Anzahl der gelöschten
Session-Daten zurück. Bei einem Fehler wird false
zurückgegeben.
Alte Speicherverfahren geben nicht die Anzahl der gelöschten Session-Daten zurück, sondern nur das Flag für Erfolg/Fehlschlag. In diesem Fall ist die Anzahl der gelöschten Session-Daten immer 1, unabhängig von der tatsächlichen Anzahl der gelöschten Daten.
Beispiel #1 session_gc()-Beispiel für Taskmanager wie cron
<?php
// Hinweis: Dieses Skript muss vom selben Benutzer ausgeführt werden
// wie der Prozess des Webservers.
// Um den Zugriff auf den Session-Datenspeicher zu initialisieren,
// ist eine aktive Session erforderlich.
session_start();
// Führt GC sofort aus
session_gc();
// Löschen der von session_gc() erzeugten Session-ID
session_destroy();
?>
Beispiel #2 session_gc()-Beispiel für ein Skript, auf das ein Benutzer Zugriff hat
<?php
// Hinweis: Es wird empfohlen, dass session_gc() von einem Taskmanager-Skript
// verwendet wird, aber es kann auch wie folgt verwendet werden.
// Wird verwendet, um den letzten GC-Zeitpunkt zu überprüfen
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// GC nur dann ausführen, wenn die GC-Periode verstrichen ist,
// d. h. session_gc() bei jeder Anfrage aufzurufen, ist eine Verschwendung
// von Ressourcen.
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>