Php 当其他不相关的对象被序列化时,为什么要将对象转换为字符串?

Php 当其他不相关的对象被序列化时,为什么要将对象转换为字符串?,php,object,serialization,Php,Object,Serialization,我的老雇主的服务器在上周末被扎根,显然服务器提供商对服务器进行了更改,这影响了PHP代码 出现的问题与序列化对象有关。正在序列化的对象和其他未序列化的对象正在转换为字符串,从而破坏了代码。这段代码在服务器被黑客攻击之前就已经运行了 以下是正在发生的事情: $plate = new Plate(); $plate2 = clone $plate; gettype($plate); // Prints "object" gettype($plate2); // Prints "object" $_

我的老雇主的服务器在上周末被扎根,显然服务器提供商对服务器进行了更改,这影响了PHP代码

出现的问题与序列化对象有关。正在序列化的对象和其他未序列化的对象正在转换为字符串,从而破坏了代码。这段代码在服务器被黑客攻击之前就已经运行了

以下是正在发生的事情:

$plate = new Plate();
$plate2 = clone $plate;
gettype($plate); // Prints "object"
gettype($plate2); // Prints "object"

$_SESSION['plate'] = serialize($plate);

gettype($plate); // Prints "string"
gettype($plate2); // Prints "string"


$plate = new Plate();
$plate2 = new Plate();
gettype($plate); // Prints "object"
gettype($plate2); // Prints "object"

$_SESSION['plate'] = serialize($plate);

gettype($plate); // Prints "string"
gettype($plate2); // Prints "string"
正如您所看到的,对象,甚至那些没有被序列化的对象,正在被转换为字符串。有什么见解吗


编辑:他们在运行PHP5.2.12时启用了register globals。

更新:我可以在PHP5.3.1上复制测试用例的一半,但前提是我将
register\u globals
设置为on:

$plate2
对我来说始终保持不变。也许你在某处有一个有趣的
$plate2=&something
参考资料?这是实际代码吗?我的代码片段在您的系统上做什么

我认为错误部分与$\u会话错误(或副作用)有关,该错误将$\u会话中的单位化变量视为全局变量。看见将会话变量的名称更改为其他名称可以解决此问题

$_SESSION['session_plate'] = serialize($plate);  // $plate will remain unharmed

如果将
register\u globals
设置为
On
是提供商所做的更改,那么您也应该去殴打提供商。

register\u globals似乎是我用您的代码测试的一个很可能的罪魁祸首。我得到的结果与您现在得到的结果相同(他们提到对某些内容进行一些更改,但没有指定“某些内容”是什么)。今天早些时候,我要求他们关闭register_globals,但他们不知何故忽视了我的要求。明天我会在后面狠狠地踢他们一脚,让你知道进展如何。全球注册系统已经关闭,一切都恢复正常。谢谢你的帮助。我不会认为全球注册者是罪魁祸首。
$_SESSION['session_plate'] = serialize($plate);  // $plate will remain unharmed