你好我有使用Zend Framework 1.7.6我的我的会议的问题。
当我尝试和数组存储到会话中存在的问题,会话命名空间还存储用户数据等。
我目前得到我的堆栈跟踪以下信息
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Zend_Session::start() -
...
Error #2 session_start() [function.session-start]: Node no longer exists Array
其中,我认为这是示数是代码:
//now we add the user object to the session
$usersession = new Zend_Session_Namespace('userdata');
$usersession->user = $user;
//we now get the users menu map
$menuMap = $this->processMenuMap($menuMapPath);
$usersession->menus = $menuMap;
这个错误才开始,因为试图阵列添加到会话命名空间的出现。
任何想法可能是导致节点不再存在阵列消息?
非常感谢
你们是不是要在会话中存储的数据相关的SimpleXML对象或别的东西的libxml?
这并不工作,因为当物体过程中去系列化没有恢复底层的DOM树session_start()
存储XML文档(如字符串)来代替。
您可以通过提供实现这一目标如“神奇功能” __sleep()
和__wakeup()
但__sleep()
必须与将要被序列化的所有属性的名称返回数组。 如果添加另一个属性,你还必须更改该数组。 这消除了一些AUTOMAGIC的...
但是,如果你menumap类只有几个属性它可能会为你可行的。
<?php
class MenuMap {
protected $simplexml = null;
protected $xmlstring = null;
public function __construct(SimpleXMLElement $x) {
$this->simplexml = $x;
}
public function __sleep() {
$this->xmlstring = $this->simplexml->asXML();
return array('xmlstring');
}
public function __wakeup() {
$this->simplexml = new SimpleXMLElement($this->xmlstring);
$this->xmlstring = null;
}
// ...
}
你应该存储在会话中的XML字符串。 或者,您可以围绕该XML字符串的包装类,要么:
- 实现序列化接口
- 实现__sleep()和__wakeup()方法。
在这些方法中,你可以照顾有关对象的状态。