PHP序列化将无法正常工作
我正在使用PHP版本5.3.3-1ubuntu9.1在本地机器上开发和执行所有测试。主机是PHP版本5.2.15 所有序列化参数都是相同的 问题在于,当我尝试在测试本地计算机上登录用户时,我会执行以下操作:PHP序列化将无法正常工作,php,oop,serialization,Php,Oop,Serialization,我正在使用PHP版本5.3.3-1ubuntu9.1在本地机器上开发和执行所有测试。主机是PHP版本5.2.15 所有序列化参数都是相同的 问题在于,当我尝试在测试本地计算机上登录用户时,我会执行以下操作: $user->getByUserId($results['id'], $db); $_SESSION['user'] = serialize($user); 它检索并序列化用户,我只要在检测到会话存在时将其加载回来: $user->LoadFromObject(unseria
$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行
我注意到,如果我在两个系统中都回显$\u会话['user']
,测试确实会显示序列化的会话,但主会话只会显示对象,而不会序列化$user
更新:
好的,经过一些测试。。。。。
我已经看到,如果在将用户初始化为之前转储会话
var_dump($_SESSION['user']);
$user = new User();
var_dump($_SESSION['user']);
它将显示正确序列化的会话。
在此之后,它将显示会话的字符串
我的用户不使用默认值执行任何excpet init操作
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();
}
您需要在生产机器上禁用register_globals。否则,您将通过分配给$\u session['user']来注册会话变量。选中。So序列化($user);是否在主机上返回$user?旁注:它是PHP5.x。使用_构造作为构造函数的标识符。使用类名来表示不推荐使用。而且真的。。。查看类自动加载-在构造函数中包含这些内容是很难看的。@Mchi将为__________________________________。也。。。。我在哪里可以得到那些自动加载?我在找类似的东西,但没找到。你能检查一下这两台机器上的register\u globals是否都关闭了吗?我认为,如果您打开了它,那么您将通过分配给$\u session来注册会话变量。