2009-12-11 58 views
0

我正在使用PHP編寫的Zend Framework和第三方應用程序進行文件上傳。 上傳過程是ajax喜歡的,我有可能是由這個應用程序引起的惱人的問題。我無法解決這個會話相關的問題!

問題是上傳應用程序破壞了我的Zend_Session!

這裏是我得到(與螢火控制檯)的錯誤:

http://pastie.org/738834

而且這是在我的ZF控制器代碼工作正常,但錯誤後顯示abbove,如果我去該控制器我將被重定向到google.com

public function init() 
    { 
     $this->_projects = new Projects(); 
     $this->_memberSes = new Zend_Session_Namespace('MyMember'); 
    } 

    public function preDispatch() 
    { 
     $member = $this->_memberSes->member; 

     if ($member==null){ 
      $this->_redirect('http://www.google.com'); 
     } 
    } 

在第三方應用程序有問題的代碼如下所示: http://pastie.org/738837

我知道我的問題並不完全清楚,但我的想法和任何形式的幫助都對我意義重大! 謝謝。

回答

0

這是發生了什麼:

  1. 類對象類的對象實例被序列化到會話中。
  2. 根據請求關機,會話文本被存儲。
  3. 在下一個請求中,會話文本被檢索並反序列化。
  4. 但是,當PHP試圖反序列化你的對象時,它不知道ObjectClass,因爲ObjectClass類文件沒有包含在這個這個請求中,只是在創建它時的最後一個請求。可以這麼說,它失去了藍圖。

因此,找出哪些類被塞進了會議,並確保您include每個請求,以防萬一。

編輯: 或者,正如尼基說,自動裝卸機可能有助於在這裏:​​

require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace('MyApp_'); 
$autoloader->setFallbackAutoloader(true); 
+0

或者確保自動裝載機總能找到它 – NDM 2009-12-11 13:56:31

+0

TNX答案的人,還是你認爲問題出在我的ZF代碼? 這可能是因爲沒有教條我沒有這個問題。 我有一個引導而據我所知主義模式的自動加載啓動,請大家看看我的bootstrap.php http://pastie.org/738956 – Splendid 2009-12-11 14:58:20

+0

啓用自動加載器,因爲我已經證明上面,它會報告哪些類無法找到。因此,例如,如果TestObject類是罪犯,它將報告無法加載TestObject.php。 – 2009-12-11 16:49:52