2009-12-11 34 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