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