Start · Sprachen · PHP · Referenz · session_decode

session_decode

Funktion

Dekodiert eine session-kodierte Zeichenkette und befüllt damit die Superglobale <code>$_SESSION</code>.

seit PHP 4.0.0 Kategorie: http

Signatur

session_decode(string $data): bool

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

Typ
bool
Beschreibung
Gibt 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.';
}
Benutzername: Alice Rolle: admin

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;
Kodiert: counter|i:42;active|b:1; Counter: 42 Aktiv: true

// 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.