节点不再存在用Zend_Session错误(Node no longer exists error

2019-09-17 16:38发布

你好我有使用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;

这个错误才开始,因为试图阵列添加到会话命名空间的出现。

任何想法可能是导致节点不再存在阵列消息?

非常感谢

Answer 1:

你们是不是要在会话中存储的数据相关的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;
    }

    // ...
}


Answer 2:

你应该存储在会话中的XML字符串。 或者,您可以围绕该XML字符串的包装类,要么:

  • 实现序列化接口
  • 实现__sleep()和__wakeup()方法。

在这些方法中,你可以照顾有关对象的状态。



文章来源: Node no longer exists error with Zend_Session