2009-07-05 10 views
1

Hallo Ich habe Probleme mit meinen Sitzungen mit Zend Framework 1.7.6.Knoten existiert nicht mehr Fehler mit Zend_Session

Das Problem besteht, wenn ich versuche, ein Array für die Sitzung zu speichern, der Sitzungsnamespace speichert auch andere Benutzerdaten.

Ich bin derzeit die folgende Meldung in meinem stacktrace bekommen

 
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Zend_Session::start() - 
... 

Error #2 session_start() [function.session-start]: Node no longer exists Array 

Der Code, wo ich denke, das ist erroring ist:

//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; 

Dieser Fehler erst seit versucht zu erscheinen begonnen hat ein hinzufügen Array zum Sitzungsnamespace.

Irgendwelche Ideen, was den Knoten verursachen könnte, existiert nicht mehr Array Mitteilung?

Vielen Dank

Antwort

3

Versuchen Sie, in den Sitzungsdaten im Zusammenhang ein SimpleXML Objekt oder etwas anderes libxml zu speichern?
Das funktioniert nicht, da die zugrunde liegende DOM-Struktur nicht wiederhergestellt wird, wenn die Objekte während session_start() unserialisiert werden. Speichern Sie stattdessen das XML-Dokument (als Zeichenfolge).

Sie können z. durch die Bereitstellung der "magic functions" __sleep() and __wakeup(). Aber __sleep() muss ein Array mit den Namen aller Eigenschaften, die serialisiert werden sollen, zurückgeben. Wenn Sie eine weitere Eigenschaft hinzufügen, müssen Sie auch dieses Array ändern. Das entfernt einige der automagischen ...

Aber wenn Ihre menumap Klasse nur ein paar Eigenschaften hat, könnte es für Sie machbar sein.

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

    // ... 
} 
+0

Ich verwende Simplexml. Mein Menü/Site Map wird in einer XML-Datei gespeichert und ich versuche es und speichere sie in einem Menu-Objekt, das in einem Array gespeichert ist. Gibt es eine Möglichkeit, das zu erreichen, was ich versuche? –

1

Sie sollten die XML-Zeichenfolge in der Sitzung speichern. Alternativ können Sie eine Wrapper-Klasse um diese XML-Zeichenfolge erstellen, die entweder:

In diesen Methoden können Sie sich um den Zustand des Objekts kümmern.

+0

Die Implementierung von Serializable ist hier sicherlich besser als mein Beispiel __sleep/__wake. – VolkerK

Verwandte Themen