Signatur
Beschreibung
session_register_shutdown() registriert intern session_write_close() als Shutdown-Handler über register_shutdown_function(). Dadurch wird sichergestellt, dass offene Sessions am Ende der Skriptausführung korrekt gespeichert und die Sitzung ordnungsgemäß geschlossen wird – auch wenn das Skript durch einen Fehler oder einen frühen Abbruch beendet wird.
Diese Funktion ist in der Regel nicht notwendig, wenn Sessions über die Standard-PHP-Einstellungen (session.auto_start oder session_start()) geöffnet werden, da PHP diesen Shutdown-Handler in diesem Fall automatisch registriert. Sie ist jedoch nützlich, wenn man einen eigenen Session-Handler implementiert oder die automatische Registrierung aus irgendeinem Grund nicht erfolgt.
Besonders relevant ist session_register_shutdown() beim Einsatz eines benutzerdefinierten Session-Handlers (z. B. mit session_set_save_handler()), wo das sechste Argument $register_shutdown auf false gesetzt wurde und man dennoch einen sicheren Shutdown-Mechanismus wünscht.
Im Gegensatz zu einem manuellen Aufruf von register_shutdown_function('session_write_close') ist diese Funktion die empfohlene, offizielle Methode und stellt sicher, dass die Session zum richtigen Zeitpunkt im Shutdown-Prozess geschlossen wird.
Rückgabewert
Beispiele
Verwendung mit benutzerdefiniertem Session-Handler
<?php
// Eigener Session-Handler
class MySessionHandler implements SessionHandlerInterface {
public function open(string $path, string $name): bool { return true; }
public function close(): bool { return true; }
public function read(string $id): string|false { return ''; }
public function write(string $id, string $data): bool { return true; }
public function destroy(string $id): bool { return true; }
public function gc(int $max_lifetime): int|false { return 0; }
}
$handler = new MySessionHandler();
// $register_shutdown auf false setzen – manuelle Kontrolle gewünscht
session_set_save_handler($handler, false);
session_start();
// Session-Shutdown manuell registrieren
session_register_shutdown();
$_SESSION['user'] = 'Max Mustermann';
echo 'Session gestartet und Shutdown-Handler registriert.';
// Am Ende des Skripts wird session_write_close() automatisch aufgerufen
Sicherheitsnetz für kritische Skripte
<?php
session_start();
// Zusätzliche Absicherung: Session-Shutdown explizit registrieren
// (nützlich, wenn das Skript unter Umständen vorzeitig beendet werden könnte)
session_register_shutdown();
$_SESSION['last_activity'] = time();
echo 'Session-Daten werden beim Skriptende sicher gespeichert.';
// Wichtig · Fallstricke
Achtung: Diese Funktion ist seit PHP 5.4.0 verfügbar. In älteren Versionen muss register_shutdown_function('session_write_close') manuell aufgerufen werden.
Wenn session_start() ohne benutzerdefinierten Handler verwendet wird, registriert PHP den Shutdown-Handler automatisch – ein manueller Aufruf von session_register_shutdown() ist dann redundant, aber nicht schädlich.
Die Reihenfolge der Shutdown-Funktionen kann bei komplexen Anwendungen eine Rolle spielen: Wird session_register_shutdown() früh aufgerufen, wird die Session möglicherweise geschlossen, bevor andere Shutdown-Handler auf Session-Daten zugreifen können. Die Reihenfolge sollte daher sorgfältig geplant werden.