PHP序列化无法正常工作

时间:2010-12-29 12:51:43

标签: php oop serialization

我正在开发并使用PHP Version 5.3.3-1ubuntu9.1版本在本地计算机上进行所有测试。主机是PHP Version 5.2.15。

所有的seriliaze论点都是相同的。

问题是当我尝试在我的测试本地计算机上登录用户时,我执行以下操作:

$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。 / p>

更新:

经过一些测试后确定..... 我已经看到,如果我在初始化用户之前转储会话

var_dump($_SESSION['user']);
$user = new User();
var_dump($_SESSION['user']);

它将正确显示序列化的会话。 之后,它将显示会话的字符串

我的用户不会使用默认值执行任何操作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();
    }

1 个答案:

答案 0 :(得分:1)

您需要在生产计算机上禁用register_globals。否则,您通过分配$ _SESSION ['user']来注册会话变量。检查these notes