Düğüm artık Zend_Session ile hata var

2 Cevap php

Merhaba Ben Zend Framework 1.7.6 kullanarak benim benim oturumları ile ilgili sorunlar yaşıyorum.

Sorun ben denemek ve oturuma bir dizi depolamak zaman, oturum ad başka userData depolar var.

Şu anda benim stacktrace aşağıdaki mesajı alıyorum

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

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

Ben bu erroring düşünüyorum kodu:

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

Bu hata, yalnızca oturum ad için bir dizi eklemek için çalışıyorum yana görünmeye başlamıştır.

Herhangi bir Node no longer exists Array mesaj neden ne olabilir fikir?

Çok teşekkürler

2 Cevap

Are you trying to store a SimpleXML object or something else libxml related in the session data?
That doesn't work because the underlying DOM tree isn't restored when the objects are unserialized during session_start(). Store the xml document (as string) instead.

Bunu, sözgelimi elde edebilirsiniz "magic functions" __sleep() ve __wakeup() sağlayarak . But __sleep() Serileştirilecek tüm özellikleri isimlerini içeren bir dizi dönmek zorundadır. Başka bir özelliği eklerseniz Ayrıca dizi değiştirmek zorunda. Bu automagic bazı kaldırır ...

Ama menumap sınıf sadece bir kaç özellikleri vardır eğer sizin için uygun olabilir.

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

    // ...
}

Siz oturumda XML dizesi saklamak gerekir. Alternatif olarak, bu XML dizesi etrafında sarıcı sınıf oluşturabilir ya da:

Bu yöntemlerden size nesnenin durumu hakkında bakabilirim.