Вопрос по php, session – У узла больше нет ошибки с Zend_Session

1

Привет у меня проблемы с моими сессиями с использованием 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;

Эта ошибка появилась только после попытки добавить массив в пространство имен сеанса.

Любые идеи, что может быть причинойNode no longer exists Array сообщение?

Большое спасибо

Ваш Ответ

2   ответа
1

те создать класс-оболочку вокруг этой строки XML, которая либо:

implements Serializable interface implements the __sleep() and __wakeup() methods.

В этих методах вы можете позаботиться о состоянии объекта.

Реализация Serializable здесь, безусловно, лучше, чем мой пример __sleep / __wake.
3

libxml, связанные с данными сеанса?
Это не работает, потому что базовое дерево DOM не восстанавливается, когда объекты не сериализуются во времяsession_start(), Вместо этого сохраните XML-документ (в виде строки).

Вы можете достичь этого, например, предоставляя"Магические функции"__sleep() and __wakeup(), Но__sleep() должен возвращать массив с именами всех свойств, которые должны быть сериализованы. Если вы добавите другое свойство, вам также придется изменить этот массив. Это удаляет некоторые из автоматических ...

Но если ваш класс меню имеет только несколько свойств, это может быть целесообразно для вас.

<?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;
    }

    // ...
}
Я использую Simplexml. Мое меню / карта сайта хранятся в XML-файле, и я пытаюсь сохранить их в объекте Menu, который хранится в массиве. Есть ли способ, которым я могу достичь того, что я пытаюсь сделать? Grant Collins

Похожие вопросы