PHP在$\u会话中存储对象

PHP在$\u会话中存储对象,php,session,object,Php,Session,Object,我是PHP新手,我正在尝试在$\u会话中保存对象。我确实读过这篇文章,但我需要储存一些东西 我使用serialize($myObject)将其放入$\u会话中,但当我使用unserialize()获得它时,我得到以下消息:警告:unserialize()希望参数1是字符串,对象在…中给出,奇怪的是,在我的本地机器上,它使用PHP5.4可以工作。在安装PHP5.2的主机上,它不起作用。我调用start\u session()并在调用unserialize之前实例化new MyObject() 但是

我是
PHP
新手,我正在尝试在
$\u会话中保存对象。我确实读过这篇文章,但我需要储存一些东西

我使用
serialize($myObject)
将其放入
$\u会话中
,但当我使用
unserialize()
获得它时,我得到以下消息:警告:
unserialize()希望参数1是字符串,对象在…
中给出,奇怪的是,在我的本地机器上,它使用PHP5.4可以工作。在安装PHP5.2的主机上,它不起作用。我调用
start\u session()
并在调用unserialize之前实例化
new MyObject()


但是我有点困惑。在一些帖子中,我读到PHP单独序列化和取消序列化对象,所以我不需要调用它。另一个帖子说我必须给它打电话

我如何解决这个问题

编辑: 我仍然对PHP5.2和5.4的不同行为感到困惑。以下代码打印出不同的结果:

$inner = '';
if (isset($_GET['inner'])){
var_dump(1);
    $inner = $_GET['inner'];
} else if (isset($_GET['lang']) === true && isset($_SESSION['inner'])){
    $inner = $_SESSION['inner'];
var_dump(2);
} else {
    unset($_SESSION['inner']);
var_dump(3);
}
var_dump($inner);

if ($inner == 'editpwd'){
    $_SESSION['inner'] = 'editpwd';

} else if ($inner == 'browseparks'){
    $_SESSION['inner'] = 'browseparks';

} else if ($inner == 'browsetricks'){
    $_SESSION['inner'] = 'browsetricks';

}

通过执行它,在这两种情况下执行相同的if分支,但“inner”的值不同。

只要检查$\u会话(如果它是对象),如果它不是对象,则取消序列化它。在PHP 5.2版上,对象可能没有实现非序列化,但在PHP 5.4版上却实现了非序列化。在会话中存储对象时,不需要
serialize()
(它已经在后台为您实现了这一点),您只需将类定义加载到
session\u start()
,或可通过自动加载功能加载。如果对象中有不可序列化的资源(文件指针等),只需定义一个适当的
\u wakeup()
函数。每次调用时,我都初始化类,然后调用start\u session()。如果我在没有serialize()的情况下放置对象,然后使用var_dump检查会话中存储的var,我会得到‘string’…“在某篇文章中,我读到PHP序列化并取消序列化对象本身,因此我不需要调用它。另一篇文章说我必须调用它。”我已经设置了一个测试用例,并用您的PHP版本进行了测试?我已经有7年没有看到过一个PHP版本,我自己必须
serialize()
对象。除非您使用的是自定义会话处理程序而不是默认会话处理程序,否则这不应该是一个问题。如果是为您准备的,请使用显示错误所需的最少代码量、您当前使用的PHP版本以及
phpinfo()
输出的
session
部分创建一个测试用例。