【问题标题】:PHP losing data inside the object after unserializePHP在反序列化后丢失对象内的数据
【发布时间】:2023-03-25 14:30:01
【问题描述】:

我首先通过序列化将 USER 对象存储在会话中,而不是尝试在同一页面上使用它来测试它,但是它没有检索到初始化的数据,一切都是空白的。

$user = new User();
echo '<br/>' . $user->getUsername(); // Gives me corerct data
userSession(serialize($user)); // Stored into session

$userObj = unserialize($_SESSION['userObj']); // Still get an object of type User
echo $userObj->getUsername(); // This returns blank unlike the first call

如果有人可以帮助我,将不胜感激,谢谢!

用户会话代码

function userSession($userObj){
    session_start();
    $_SESSION['userObj'] = $userObj;
}

用户类别

class User{
    protected $pdo;
    private $id, $username, $banned, $email, $first_name, $last_name, $mobile_phone, $city, $address, $postal_code, $user_type, $active;
// Create a user
    public function __construct(){
        $con = new Connection();
        try{
             $this->pdo = $con->getConnection();
        }catch (PDOException $e){
                echo $e->getMessage(); // Store to file
        }
    }

【问题讨论】:

  • 你session_start()总是在调用你的用户对象之前吗?
  • 你能显示userSession() 的代码吗?这是一个很大的缺失步骤,可能会产生影响。
  • 显示序列化/反序列化方法的代码
  • @WaldsonPatricio serialize() 是原生 PHP 函数。
  • 添加 User 类,那里可能发生了什么导致您的问题。

标签: php serialization deserialization


【解决方案1】:

不要序列化完整的 User 类,而是尝试仅序列化数据,然后使用相同的数据创建一个新对象。
基本上,您要做的是添加一个User-&gt;getData() 和User-&gt;setData(),其中一个将以您可以保存的格式(JSON,可序列化数组)返回所有相关数据,另一个将允许您创建一个新的@ 987654324@ 对象并重新加载此数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2012-04-15
    • 2015-09-04
    • 2014-01-13
    • 2018-12-26
    • 2021-12-08
    相关资源
    最近更新 更多