“会话已经开始……” Zend Framework应用程序中的异常

问题描述 投票:11回答:12

尝试加载Zend Framework应用程序时收到此错误:

致命错误:未捕获的异常带有消息的“ Zend_Session_Exception”“会议已经由session.auto-start或session_start()'在/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php:462

堆栈跟踪:

#0 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session/Namespace.php(143):Zend_Session :: start(true)

#1 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth/Storage/Session.php(87):Zend_Session_Namespace-> __ construct('Zend_Auth')

#2 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(91):Zend_Auth_Storage_Session-> __ construct()

#3 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(141):Zend_Auth-> getStorage()

#4 /www/htdocs/w00a1ed7/autospin/redaktion/application/layouts/scripts/layout.phtml(31):Zend_Auth-> hasIdentity()

#5 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View.php(108):include('/ www / htdocs / w00 ...')

#6 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/View/Abstract.php(831):Zend_View-> _ run('/ www / htdocs / w00 ...')

#7 / www / htdocs / w00a1ed在/www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php中在线462]

我在本地服务器上使用Zend_Auth,并且运行良好,但在生产服务器上却出现了先前的错误,但并非每次都出现。

我已经检查session.autostart文件中的0设置为.htaccess

如何解决此错误?


谢谢您的回答,但我在任何地方都不使用session_start()。仅适用于ZF。

我仅在共享服务器上有此问题,在我的本地服务器脚本上工作正常。

我将INIT函数与此代码一起使用:

受保护的$ user;

public function init()
{   
    if(!Zend_Auth::getInstance()->hasIdentity())
    {
        $this->_redirect('auth/login');
    }else
    {
        $this->user = Zend_Auth::getInstance()->getIdentity();
    }
}

我已经准备尝试仅在indexAction中设置此代码,以便其他操作不必破解Auth ...,但仍然有问题。

是否有一种方法可以在Action中设置为不检查会话或类似的东西?

Beste问候

php zend-framework session .htaccess zend-auth
12个回答
15
投票
问题是,必须在会话开始之前调用Zend_Session::start()。但是,由于session.autostart为0(顺便说一句,它位于

php.ini中,而不是

。htaccess中),因此您可能在某处写了session_start();。不允许这样做,因为ZF希望完全控制会话,即您不应该直接访问全局会话变量。

要解决该问题,请在代码文件中搜索session_start()和其中一个

删除所有发生的事件,只有一个。要通知它是否已经启动,请设置error_reporting(E_ALL|E_STRICT);

    在所有位置都用Zend_Session::start();替换
  • 如果找不到所有出现的事件,请找到一个session_start();使用以下代码片段困扰您的Zend_Auth::getInstance()->hasIdentity()并迅速解决问题'>
  • try { Zend_Session::start(); } catch(Zend_Session_Exception $e) { session_start(); }

    如果您在整个应用程序中使用ZF,我会选择2)


  • 1
    投票
    有一个针对此问题的问题:

    0
    投票

    0
    投票

    18
    投票

    11
    投票

    3
    投票

    2
    投票
    RPCL

    2
    投票

    1
    投票

    1
    投票

    1
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.