Signatur
Beschreibung
session_encode() wandelt den gesamten Inhalt des $_SESSION-Superglobals in eine einzelne Zeichenkette um, die dem Format entspricht, das PHP intern für die Session-Speicherung verwendet. Das Format hängt von der aktuell konfigurierten session.serialize_handler-INI-Einstellung ab (standardmäßig php oder php_serialize).
Die Funktion ist nützlich, wenn man den aktuellen Session-Zustand manuell speichern, debuggen, in eine Datenbank schreiben oder über ein benutzerdefiniertes Speicher-Backend weiterleiten möchte. Zum Wiederherstellen einer so erzeugten Zeichenkette dient die Gegenfunktion session_decode().
Im Standardformat (php) werden Variablen im Stil varname|serialisierter_wert hintereinander gereihit. Verwendet man den Handler php_serialize, wird die komplette Session als reguläres serialize()-Ergebnis kodiert, was robuster mit Sonderzeichen in Variablennamen umgeht.
Es ist zu beachten, dass session_encode() nur dann korrekt funktioniert, wenn eine Session zuvor mit session_start() gestartet wurde. Ohne aktive Session liefert die Funktion false.
Rückgabewert
false zurückgegeben.Beispiele
Session-Inhalt als Zeichenkette ausgeben
<?php
session_start();
$_SESSION['user'] = 'Alice';
$_SESSION['role'] = 'admin';
$_SESSION['counter'] = 42;
$encoded = session_encode();
echo $encoded;
Session-Zustand sichern und wiederherstellen
<?php
session_start();
$_SESSION['cart'] = ['item1', 'item2', 'item3'];
$_SESSION['promo'] = 'SALE10';
// Aktuellen Zustand als Snapshot speichern
$snapshot = session_encode();
file_put_contents('/tmp/session_snapshot.txt', $snapshot);
echo "Session gespeichert:\n";
echo $snapshot . "\n";
// Später: Snapshot wiederherstellen
session_start(); // neue oder gleiche Session
$data = file_get_contents('/tmp/session_snapshot.txt');
if (session_decode($data)) {
echo "Wiederhergestellt. Warenkorb: ";
print_r($_SESSION['cart']);
} else {
echo "Wiederherstellung fehlgeschlagen.";
}
// Wichtig · Fallstricke
Serialize-Handler beachten: Das Ausgabeformat hängt von session.serialize_handler ab. Der Standard-Handler php verarbeitet keine Variablennamen mit dem Pipe-Zeichen (|) korrekt. Wer solche Schlüssel benötigt, sollte php_serialize verwenden (ini_set('session.serialize_handler', 'php_serialize')).
Kompatibilität beim Decode: Eine mit einem bestimmten Handler kodierte Zeichenkette muss auch mit demselben Handler dekodiert werden. Das Mischen verschiedener Handler führt zu Datenverlust oder Fehlern.
Kein Ersatz für serialize(): session_encode() ist kein allgemeiner Serialisierer — er liest ausschließlich den Inhalt von $_SESSION und ist nicht für die Serialisierung beliebiger Daten geeignet.