Start · Sprachen · PHP · Referenz · session_register_shutdown

session_register_shutdown

Funktion

Registriert <code>session_write_close()</code> als Shutdown-Funktion, damit die Session am Ende der Skriptausführung automatisch gespeichert und geschlossen wird.

seit PHP 5.4.0 Kategorie: http

Signatur

session_register_shutdown(): void

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

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

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
Session gestartet und Shutdown-Handler registriert.

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.';
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.