在两个php脚本之间传递$_SESSION中的对象


Pass an object in $_SESSION between 2 php scripts

可能重复:
PHP:存储';对象';在$_SESSION 内

我有两个名为"search.php"answers"share.php"的脚本文件,我想将信息从第一个发送到第二个。我创建了一个名为$_SESSION['search']的var,它是search类的一个对象,但我无法读取第二个脚本文件中的对象。

search.php

session_start();
$_SESSION['search'] = new Search($text);
(...)

share.php

session_start();
$itemList = $_SESSION['search']->getItemList(); // Error

为什么?如何用PHP将信息从一个脚本传递到另一个脚本?

如果要使用会话传递变量,则需要将变量添加到search.php中的会话中,如下所示:

$itemlist = new Search($text);
$_SESSION['search']         = $itemlist;

然后将变量放回share.php中,如下所示:

$itemlist = $_SESSION['search'];
echo $itemlist;

如果你有问题,我会在第一页检查"new Search($text);",并确保它是你真正想要存储的内容。

PHP自动序列化会话中的对象。

该对象中不能有任何成员是资源(即数据库连接等)。如果你需要它们,你需要将__sleep和__wake方法添加到你希望存储在会话中的对象中__sleep将obj呈现为值obj(实际上是一个数组,因为您必须返回一个数组),__wake方法应该基于该数组重建obj。

读取此

也许您只缺少包含Search类的php文件的include。

require_once('Search.php');

如果在从会话中反序列化对象时还不知道该类,那么PHP会生成一个"伪"对象,只包含属性,但不知道它的方法。如果包含该类,那么PHP可以将其反序列化为该类的真实对象。