名稱|序列化值 並以分號分隔。session_encode() 產生的字串,還原至 `$_SESSION`。兩者專為 PHP 原生 Session 儲存格式設計,不等同 於 serialize()/unserialize()。
<?php
session_start();
$_SESSION['bgcolor'] = 'white';
$_SESSION['fontcolor'] = 'blue';
$_SESSION['user'] = ['id' => 1, 'name' => 'Alice'];
$encoded = session_encode();
echo $encoded;
// 輸出範例:
// bgcolor|s:5:"white";fontcolor|s:4:"blue";user|a:2:{i:0;i:1;i:1;s:5:"Alice";}
?>
<?php
session_start();
$_SESSION = []; // 清空當前 session
$encoded = 'products|a:2:{i:0;s:8:"Hal 2000";i:1;s:6:"Tardis";}';
session_decode($encoded);
foreach ($_SESSION['products'] as $p) {
echo $p . "<br>";
}
// 輸出:
// Hal 2000
// Tardis
?>
| 特性 | session_encode/decode | serialize/unserialize |
|---|---|---|
| 格式 | 專屬:key|value;key|value | 標準 PHP 序列化格式 |
| 處理對象 | 僅 `$_SESSION` 超全域陣列 | 任意變量 |
| Session ID | 不包含 | 不包含 |
| 用途 | Session 資料備份、跨進程同步、除錯 | 通用資料持久化、快取、傳遞 |
<?php
// 備份當前 session 到資料庫/快取
$backup = session_encode();
// 還原
session_decode($backup);
<?php
echo '<pre>';
echo htmlspecialchars(session_encode());
echo '</pre>';
若多台伺服器共用 Session 儲存(如 Redis),通常直接共享儲存層即可,無需手動 encode/decode。但若需透過 API 傳遞 Session 狀態,可使用此對函數。
session.serialize_handler(預設 php,可選 php_binary, php_serialize)。不同處理器輸出格式不同,解碼時必須一致。php_serialize 且有魔術方法),請確保資料來源可信。session_encode/decode 是 PHP Session 內部儲存格式的專用序列化工具,適合 Session 資料的備份、遷移、除錯。通用資料序列化請使用 serialize/unserialize 或 json_encode/decode。