session_gc
(PHP 7 >= 7.1.0, PHP 8)
session_gc — Führt die Garbage Collection der Session-Daten durch
Beschreibung
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.
Parameter-Liste
Diese Funktion besitzt keine Parameter.
Rückgabewerte
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.
Beispiele
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);
}
?>