【发布时间】:2017-08-25 01:57:30
【问题描述】:
我正在尝试将对象存储到 $_SESSION,但这样做时遇到了一些问题。
这是课程:
class Profile {
var $username;
var $password;
var $admin;
function __construct($username, $password) {
$this->username = $username;
$this->password = $password;
}
function getName() {
return $this->username;
}
function isAdmin() {
return $this->admin;
}
function setAdmin($admin) {
return $this->admin = $admin;
}
}
我以这种方式将数据存储在会话中:
$_SESSION['profile'] = serialize($profile);
当我尝试在另一个类中加载该数据时,我收到一个错误:
致命错误:main():脚本试图执行方法或访问不完整对象的属性。请确保您尝试操作的对象的类定义“Profile”已在 unserialize() 被调用之前加载或提供 __autoload() 函数以在 C:\wamp64 中加载类定义\www\login\hidden.php 第 33 行
我已经转储了加载的对象以检查它是否实际被加载,并且似乎该对象已被反序列化,并且我可以看到对象内部的所有数据本身。
$profile = unserialize($_SESSION['profile']);
var_dump($profile);
我在转储它时在我的本地主机上收到它:
C:\wamp64\www\login\hidden.php:31:
object(__PHP_Incomplete_Class)[1]
public '__PHP_Incomplete_Class_Name' => string 'Profile' (length=7)
public 'username' => string 'myles' (length=5)
public 'password' => string 'myles' (length=5)
public 'admin' => boolean true
我真的很迷茫,不知道如果有人可以帮助我该怎么做,那就太好了。
【问题讨论】:
-
在反序列化之前,您需要执行与调用
$profile = new Profile("u", "p");之前相同的操作,即确保您已包含定义该类的所有文件。 -
根据@miken32 的建议,我会将
Profile类的定义放在一个单独的文件中,并将其包含在您将使用它的所有页面中 -
@miken32 谢谢!我忘了
include "Profile.php"哎呀! -
@gmc 这就是我所做的,感谢 cmets 伙计们 :)
标签: php session object serialization