为什么UnexpectedValueException
被扔进去session_start()
?
我有具有属性的对象SPLObjectstorage
。该对象被分配给像这样的会话
$_SESSION['foo'] = $barObject;
我怀疑内部会话序列化面临解码问题。我将会话存储在数据库中,看起来它正在序列化objectStorage
但无法解码。
示例会话数据
self|O:4:"User":8:{s:5:"�*�id";N;s:7:"�*�nick";N;s:13:"�*�reputation";i:1;s:11:"�*�password";N;s:8:"�*�email";N;s:7:"�*�crud";O:10:"CRUDobject":2:{s:13:"�*�fieldCache";a:0:{}s:13:"�*�dependency";r:1;}s:7:"�*�auth";N;s:11:"�*�roleList";C:11:"RoleStorage":23:{x:i:1;N;,r:13;;m:a:0:{}}}
Rolestorage
SPLObjectstorage
session_decode()
上面字符串的扩展是否也返回false
任何想法?
删除该roleList
属性使其正确序列化。
如果我分开做
$sr = serialize($roles); // $roles is RoleStorage object
var_dump($sr);
var_dump(unserialize($sr));
它打印string 'C:11:"RoleStorage":22:{x:i:1;N;,r:3;;m:a:0:{}}' (length=46)
然后在反序列化时失败并显示相同的消息。我不知道为什么会这样。
注意:在附加对象时,RoleStorage
我使用对象本身作为数据。意味着它被存储为参考。我不知道(如果)如何在serialize()
内部处理这个。