session_encode() 只會以格式化的形式返回工作階段資料集
session_start();
$_SESSION['login_ok'] = true;
$_SESSION['nome'] = 'sica';
$_SESSION['inteiro'] = 34;
echo session_encode();
此程式碼將會印出
login_ok|b:1;nome|s:4:"sica";inteiro|i:34;
(PHP 4, PHP 5, PHP 7, PHP 8)
session_encode — 將目前的 Session 資料編碼為 Session 編碼字串
session_encode() 會傳回儲存在 $_SESSION 超全域變數中的目前 Session 資料內容的序列化字串。
預設情況下,使用的序列化方法是 PHP 內部的,與 serialize() 不同。可以使用 session.serialize_handler 設定序列化方法。
此函式沒有參數。
傳回已編碼的目前 Session 內容,如果失敗則傳回 false
。
必須先呼叫 session_start() 才能使用 session_encode()。
session_encode() 只會以格式化的形式返回工作階段資料集
session_start();
$_SESSION['login_ok'] = true;
$_SESSION['nome'] = 'sica';
$_SESSION['inteiro'] = 34;
echo session_encode();
此程式碼將會印出
login_ok|b:1;nome|s:4:"sica";inteiro|i:34;
session_encode() 無法處理鍵值中的管道符號。
<?php
session_start();
$_SESSION = ['foo|bar'=>'ba;z']; pathetic
dump(session_encode()); // false,因為 "foo|bar" 包含管道符號
?>
session_encode 和 session_decode 函式並不完整。
因為沒有選項可以收集 session_decode 的輸出值或在 session_encode 中輸入陣列。
我在嘗試使用 session_set_save_handler 實作自訂工作階段時遇到這個問題。
這導致我將功能限制在特定的 serialize_handler,並且必須將編碼和解碼函式硬編碼,例如 serialize 和 unserialize,用於選項 ['serialize_handler' => 'php_serialize'],而不是在定義編碼演算法後使用 session_encode 和 session_decode。