1
將對象引用存儲在會話容器($ _SESSION)中時會發生什麼?
在這個過程中,當這些值被序列化時,對象引用是否被轉換爲拷貝或者它們是否被破壞?很多提前
將對象引用存儲在會話容器($ _SESSION)中時會發生什麼?
在這個過程中,當這些值被序列化時,對象引用是否被轉換爲拷貝或者它們是否被破壞?很多提前
當會話書面
session_start();
$testArrayA = [];
$testArrayB = [];
$testArrayA["abc"] = &$testArrayB;
$testArrayB["def"] = "test2";
$_SESSION["myvalue"] = $testArrayA;
謝謝,這被序列化。序列化並不關心引用,因爲它只是讀取數據(如果它從參考讀取它將解析引用的目標)。
您可以通過更改最後一行看到此行爲:
var_dump(serialize($testArrayA));
string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"
這就是被存儲在會話。
請注意,如果某個對象實現了__sleep
或Serializable
接口,則其序列化行爲是唯一的。我相信PDO
將重寫序列化行爲以銷燬其數據庫連接參考。
你可以通過在數據庫中實現存儲會話來自己測試。 –
我寧願通過序列化包含兩次相同引用的數組來測試它。我敢打賭,這兩個參考文件最終都是不同的副本,但情況可能並非如此。 – zneak