Signatur
Beschreibung
session_decode() parst eine Zeichenkette im internen PHP-Session-Format und schreibt die darin enthaltenen Variablen direkt in die Superglobale $_SESSION. Die Funktion eignet sich, um Session-Daten, die zuvor mit session_encode() serialisiert oder aus einer externen Quelle (z. B. Datenbank oder Cache) gelesen wurden, wieder in die aktive Session zu laden.
Damit session_decode() korrekt funktioniert, muss zuvor eine Session gestartet worden sein (z. B. mit session_start()). Die Funktion berücksichtigt den aktuell konfigurierten Session-Serializer, der über die Direktive session.serialize_handler in der php.ini festgelegt wird. Der Standard-Serializer ist php; alternativ stehen php_binary und php_serialize zur Verfügung.
Im Gegensatz zu unserialize() arbeitet session_decode() mit dem spezifischen Session-Kodierungsformat und ist daher nicht für allgemeine PHP-Serialisierungsdaten geeignet. Existierende $_SESSION-Einträge werden beim Dekodieren ergänzt bzw. überschrieben, nicht vollständig gelöscht.
Ein typischer Anwendungsfall ist die Implementierung eines eigenen Session-Handlers, der Session-Daten aus einer Datenbank liest und sie über session_decode() in die Session einspeist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Eine session-kodierte Zeichenkette im Format des aktiven session.serialize_handler, wie sie z. B. von session_encode() erzeugt oder aus einer Datenbank gelesen wurde. |
Rückgabewert
true zurück, wenn die Dekodierung erfolgreich war, andernfalls false (z. B. bei einem ungültigen Format oder wenn keine Session aktiv ist).Beispiele
Session-Daten aus einer Datenbank wiederherstellen
<?php
session_start();
// Simulierter Abruf aus der Datenbank
$sessionDataFromDb = 'username|s:5:"Alice";role|s:5:"admin";';
if (session_decode($sessionDataFromDb)) {
echo 'Benutzername: ' . $_SESSION['username'] . PHP_EOL;
echo 'Rolle: ' . $_SESSION['role'] . PHP_EOL;
} else {
echo 'Fehler beim Dekodieren der Session-Daten.';
}
Hin- und Rückkodierung mit session_encode / session_decode
<?php
session_start();
// Session-Variablen setzen und kodieren
$_SESSION['counter'] = 42;
$_SESSION['active'] = true;
$encoded = session_encode();
echo 'Kodiert: ' . $encoded . PHP_EOL;
// Session leeren und dann wiederherstellen
$_SESSION = [];
session_decode($encoded);
echo 'Counter: ' . $_SESSION['counter'] . PHP_EOL;
echo 'Aktiv: ' . var_export($_SESSION['active'], true) . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Übergeben Sie niemals ungeprüfte Benutzereingaben an session_decode(). Manipulierte Session-Daten können dazu führen, dass beliebige Werte in $_SESSION gesetzt werden, was zu Rechteeskalation oder anderen Angriffsvektoren führen kann.
Stellen Sie sicher, dass der session.serialize_handler zur Erzeugung und zur Dekodierung der Daten identisch ist; andernfalls schlägt die Funktion stillschweigend fehl oder liefert falsche Ergebnisse.
Die Funktion gibt auch dann false zurück, wenn keine Session aktiv ist. Rufen Sie daher immer zuerst session_start() auf.