在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]

Posted

技术标签:

【中文标题】在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]【英文标题】:Pass an object in $_SESSION between 2 php scripts [duplicate] 【发布时间】:2012-03-11 18:15:55 【问题描述】:

可能重复:php: Storing 'objects' inside the $_SESSION

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

search.php

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

(...)

share.php

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

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

【问题讨论】:

错误说什么???请始终在您的问题中提出错误。 PS。也许 share.php 没有包含 Search 类,因此您可以使用他们的方法。 (包括更多代码) 【参考方案1】:

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

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

然后像这样在 share.php 中取回变量:

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

如果您遇到问题,我会检查“new Search($text);”在第一页上,并确保它是您真正想要存储的开头。

【讨论】:

这就是我在 '$_SESSION['search'] = new Search($text);'中所做的事情 那么你遇到了什么问题?如果你在 share.php 上回显 $itemlist,你会得到什么? 我在 php_error.log 中出现错误 -> PHP 致命错误:在 /Applications/MAMP/htdocs/SAPP2/share.php 中的非对象上调用成员函数 getItemList()跨度> 【参考方案2】:

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

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

阅读this

【讨论】:

【参考方案3】:

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

require_once('Search.php');

如果在您从会话中反序列化对象时该类未知,那么 PHP 会创建一个“虚拟”对象,仅包含属性,但不了解其方法。如果包含该类,那么 PHP 可以将其反序列化为该类的真实对象。

【讨论】:

以上是关于在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在这种特殊情况下在 PHP 脚本之间传递值

如何在php脚本之间传递变量?

jmeter 不同线程组之间传递变量2

在 PHP 和 Perl 之间传递大量数据

解析/传递命令行参数到bash脚本 - “$ @”和“$ *”之间有什么区别?

怎么用按键精灵在写的两个脚本之间传递变量?