将序列化对象存储在会话中

Nek*_*eka 0 symfony

我有一个Service对象,它将对象存储到会话中

$this->session->set('utmUser', $this->session->serialize($this->utmUser));
Run Code Online (Sandbox Code Playgroud)

我从会话中获取了反序列化的对象:

$this->utmUser = $this->session->unserialize($this->session->get('utmUser'));
Run Code Online (Sandbox Code Playgroud)

但结果不是存储对象的实例.

会话包含此序列化字符串:

string(221)"a:2:{i:0; O:68:"Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage":1:{s:10:"*options"; a:5:{s:8 : "寿命"; I:0; S:4: "路径"; S:1: "/"; S:6: "结构域"; S:0: ""; S:6: "安全"; b: 0; S:8: "仅Http"; b:0;}} I:1; S:2: "EN";}"

将对象的所有属性设置为受保护不起作用.我究竟做错了什么?

Car*_*dos 5

session-> serialize()和unserialize()不执行您认为的操作,它们不会序列化和反序列化对象,它们会序列化和反序列化整个会话.它们没有采用任何参数,实际上已经在Symfony 2.1中删除了

您可以将对象设置为会话,Symfony将负责为您序列化和反序列化,只需使用:

$this->session->set('utmUser', $this->utmUser);
Run Code Online (Sandbox Code Playgroud)

$this->utmUser = $this->session->get('utmUser');
Run Code Online (Sandbox Code Playgroud)

在任何情况下,如果您确实需要将整个对象存储到会话中,您可以重新考虑.如果这是一个大对象,这可能是非常低效的.如果是这种情况并且对象存储在数据库中,则可以只存储对象的id,然后在需要时从id重新加载它.