【发布时间】:2011-06-01 01:17:42
【问题描述】:
我正在使用 PHP 版本 5.3.3-1ubuntu9.1 版本在本地机器上开发和进行所有测试。主机为 PHP 版本 5.2.15。
所有的序列化参数都是相同的。
问题是当我尝试在我的测试本地机器上登录用户时,我执行以下操作:
$user->getByUserId($results['id'], $db);
$_SESSION['user'] = serialize($user);
它检索并序列化用户,只要我检测到会话存在,我就将其加载回来:
$user->LoadFromObject(unserialize($_SESSION['user']));
这在我的测试机器上完美运行。只是在主机上传输文件,看看我是否可以得到一个测试版,但我一直在得到:
警告:unserialize() 期望 参数 1 为字符串,给定对象 在 /home/gamerent/public_html/beta/includes/header.php 第 19 行
我注意到,如果我在两个系统中回显$_SESSION['user'],测试确实会向我显示序列化的,但主要的只会显示对象,不会序列化$user。
更新:
经过一些测试后确定...... 我已经看到,如果我在将用户初始化为之前转储会话
var_dump($_SESSION['user']);
$user = new User();
var_dump($_SESSION['user']);
它将正确显示序列化的会话。 之后它会显示会话的字符串
我的用户没有使用默认值执行任何操作,除了初始化之外
function User() {
$this->userId = 0;
$this->firstname = "Guest";
$this->password = "";
include_once('includes/generalUtils.php');
$this->generalUtils = new generalUtils();
include_once('includes/utils.php');
$this->utils = new utils();
}
【问题讨论】:
-
所以序列化($user);是在主机上返回 $user 吗?
-
旁注:它是 PHP 5.x。使用 __construct 作为构造函数的标识符。不推荐使用类名。
-
真的......看看类自动加载 - 在构造函数中包含这些内容是丑陋的。
-
@Mchi 会为 __constructor 做,我想到的是不知道它是 depr。另外....我在哪里可以得到那些自动加载?我正在寻找类似的东西但没有找到任何东西。
-
你能检查一下两台机器上的 register_globals 是否都关闭了吗?我认为,如果你打开它,你正在通过分配给 $_SESSION 来注册一个会话变量。
标签: php oop serialization