【问题标题】:Storing objects inside a session在会话中存储对象
【发布时间】: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


【解决方案1】:

在反序列化之前,您需要执行与正常创建对象实例之前相同的操作:

$profile = new Profile("u", "p");

也就是说,确保您已包含所有定义该类的文件。这就是错误消息试图告诉您的内容:

请确保您尝试操作的对象的类定义“Profile”在调用 unserialize() 之前加载

所以做这样的事情:

<?php
require_once '/path/to/Profile.class.php';
session_start();
$profile = unserialize($_SESSION['profile']);

【讨论】:

  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 2012-01-26
  • 2014-01-17
  • 2012-06-16
  • 2010-11-08
  • 1970-01-01
相关资源
最近更新 更多