我正在尝试将对象存储到$_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():脚本尝试执行方法或访问不完整对象的属性。请确保在 unserialize()被调用之前加载了您尝试操作的对象的类定义“Profile”,或者提供__autoload()函数以在C:\ wamp64中加载类定义第33行\ www \ login \ hidden.php
我已经转储了加载的对象以检查它是否实际被加载,并且看起来该对象已被反序列化,我可以在对象内看到所有数据本身。
$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
如果有人可以帮助我,我真的很迷茫并且不知道该怎么办。那会很棒。
答案 0 :(得分:1)
在反序列化之前,您需要执行与正常创建对象实例之前相同的操作:
$profile = new Profile("u", "p");
也就是说,确保已包含定义该类的所有文件。这就是错误消息试图告诉您的内容:
请确保课程定义"简介"您尝试操作的对象是在 unserialize()被调用之前加载
所以做这样的事情:
<?php
require_once '/path/to/Profile.class.php';
session_start();
$profile = unserialize($_SESSION['profile']);