我有一个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";}"
将对象的所有属性设置为受保护不起作用.我究竟做错了什么?
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重新加载它.
| 归档时间: |
|
| 查看次数: |
4901 次 |
| 最近记录: |