PHP:存储对象引用存储在$ _SESSION中时会发生什么

时间:2013-01-23 05:11:36

标签: php

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

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

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

非常感谢

1 个答案:

答案 0 :(得分:1)

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

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

来查看此行为
var_dump(serialize($testArrayA));

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

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

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