2009-07-05 62 views
1

嗨我的問題與我的會議使用Zend Framework 1.7.6。節點不再存在Zend_Session的錯誤

當我嘗試將數組存儲到會話中時,存在問題,會話名稱空間也存儲其他用戶數據。

我目前我的堆棧跟蹤

 
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; 

此錯誤纔開始,因爲試圖添加的出現數組添加到會話名稱空間。

任何想法可能導致節點不再存在Array消息?

非常感謝

回答

3

你們是不是要在會話中存儲的數據相關的SimpleXML對象或別的東西的libxml?
這不起作用,因爲在session_start()期間對象未被序列化時,底層DOM樹未被恢復。改爲存儲xml文檔(以字符串形式)。

您可以實現例如通過提供"magic functions" __sleep() and __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; 
    } 

    // ... 
} 
+0

我使用simplexml。我的菜單/站點地圖存儲在一個xml文件中,我嘗試並將它們存儲在一個存儲到數組中的Menu對象中。有什麼方法可以實現我想要做的? – 2009-07-05 16:40:00

1

您應該將XML字符串存儲在會話中。或者,您可以圍繞該XML字符串,要麼一個包裝類:

在這些方法中,您可以關注對象的狀態。

+0

在這裏實現Serializable當然比我的__sleep/__ wake示例更好。 – VolkerK 2009-07-06 23:00:16