1

当对象引用存储在会话容器 ($_SESSION) 中时会发生什么?

在这个过程中,当值被序列化时,对象引用是被转换成副本还是被破坏了?

session_start();
$testArrayA = [];
$testArrayB = [];    
$testArrayA["abc"] = &$testArrayB;
$testArrayB["def"] = "test2";
$_SESSION["myvalue"] = $testArrayA;

非常感谢提前

4

1 回答 1

1

当会话被写入时,它会被序列化。序列化根本不关心引用,因为它只是读取数据(如果它从引用中读取,它将解析引用的目标)。

您可以通过将最后一行更改为:

var_dump(serialize($testArrayA));

string(44) "a:1:{s:3:"abc";a:1:{s:3:"def";s:5:"test2";}}"

这就是存储在会话中的内容。

请注意,如果一个对象实现__sleepSerializable接口,它的序列化行为是唯一的。我相信这PDO会覆盖序列化行为以破坏其数据库连接引用。

于 2013-01-23T05:15:22.650 回答