无法序列化Symfony\Component\Cache\Adapter\AbstractAdapter

ozxc1zmp  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(129)

我删除了FosUserBundle并开发了自己的User模块。从那时起,当我尝试序列化会话时,我会弹出此错误。

$session->set($this->sessionKey, serialize($token));

编辑:即使我有答案,我还是把这个问题贴了出来,因为我花了3天的时间在这个问题上,它可以帮助其他人(比如我未来的我路过)

6yjfywim

6yjfywim1#

因为我在寻找类似问题时偶然发现了这个线程:
确保没有将任何Symfony\Component\Cache\Adapter\AbstractAdapter示例写入PHP会话。
在请求结束时,php尝试序列化会话,以便在下一个请求中获取它。Symfony\Component\Cache\Adapter\AbstractAdapter通过设计抛出序列化异常。
在我们的例子中,我们有一个Utility-class设置为Object的属性。这个utility class持有对Symfony FileCache的引用。一旦Object被添加到$_SESSION,session-close就失败了,上面显示的异常(因为对象引用了utility,utility引用了file-cache)。删除引用使反序列化/序列化再次成为可能。

8hhllhi2

8hhllhi22#

问题是User实体在会话中没有正确序列化。

class User implements UserInterface ,\Serializable
{
    /**
     * {@inheritdoc}
     */
    public function serialize()
    {
        $test = null;
        return serialize([
            $this->password,
            $this->salt,
            $this->username,
            $this->enabled,
            $this->id,
            $this->email,
            $this->roles,
            $this->groups
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function unserialize($serialized)
    {
        $data = unserialize($serialized);

        list(
            $this->password,
            $this->salt,
            $this->username,
            $this->enabled,
            $this->id,
            $this->email,
            $this->roles,
            $this->groups
            ) = $data;
    }
}

相关问题