【问题标题】:Fatal:error - session has already been started by session.auto-start or session_start()致命:错误 - 会话已由 session.auto-start 或 session_start() 启动
【发布时间】:2011-10-06 16:07:17
【问题描述】:

我正在使用 zend 框架中的 Web 应用程序并在其中实现登录和注销编码。身份验证适配器运行良好。 问题是,在验证和检查身份后,它会在地址栏中显示正确的重定向 url,但页面显示错误而不是显示视图

这里是错误
致命错误:未捕获的异常 'Zend_Session_Exception' 与消息 '会话已由 session.auto-start 或 session_start()' 在 C:\Users\amrit\Zend\ 中启动workspaces\DefaultWorkspace7\webDeveloper\library\Zend\Session.php 在第 462 行

Zend_Session_Exception: session 已经由 session.auto-start 或 session_start() 在 C:\Users\TranceServe\Zend\workspaces\DefaultWorkspace7\webDeveloper\library\Zend\Session.php 的第 462 行启动
当我点击刷新时,它会显示正确的视图。注销代码运行良好。

这是我的 Zend 代码

public function adminloginAction ()
{
    $login = new Admin_Form_Login();
    $login->setAction("adminlogin");
    $login->setMethod("POST");
    if (isset($_SESSION)) {
        echo ("start");
      } else {
        echo ("not started");
    }
    if ($this->_request->isPost() && $login->isValid($_POST)) {
        $adapter = new webDeveloper_Auth_StaffAdapter(
        $this->getRequest()->getParam("email"), 
        ($this->getRequest()->getParam("pwd")));
        $result = Zend_Auth::getInstance()->authenticate($adapter);
        if (Zend_Auth::getInstance()->hasIdentity()) {
           $this->_redirector->gotoUrl('/admin/index');
        } else {
            $this->_redirector->gotoUrl('/admin/adminauthentication/adminlogin');
        }
    }
    $this->view->form = $login;
}

【问题讨论】:

  • 你调用 session_start() 了吗?
  • 我没有在任何地方调用 session_start()。当用户拥有有效凭据时,会话是使用身份验证适配器自动创建的 ....

标签: php zend-framework


【解决方案1】:

嗯……已经告诉你了:

Zend_Session_Exception: 会话已经被 session.auto-start

启动

因此请尝试检查您的 php 设置并关闭 session.auto-start。

但如果不是这样,那么在您的代码中尝试检查会话启动的原因以及由哪个组件启动。可能是你使用了一些 3rd 方的东西。

带有跟踪的 Xdebug 将帮助您了解在何处以及谁开始了会话。

【讨论】:

    【解决方案2】:

    有一个big discussion about this on the German XING forums last year。其中一个结果是快速而肮脏的修复,只需使用以下代码行在 Bootstrap 中启动一个会话:

    Zend_Session::start();
    

    在我看来,这远非真正的解决方案,但如果您的大多数页面无论如何都需要会话,那么额外的开销是可以接受的。但是,如果您只需要针对项目的某些模块或部分进行会话,那么您真的应该采用 Xdebug 方式。

    【讨论】:

      【解决方案3】:

      zend_tool 用于创建项目时,会在 application/configs/application.ini 文件中添加以下行:

      resources.session.save_path = APPLICATION_PATH "/../data/session"
      

      检查此路径是否存在并且可由应用程序写入。否则,Zf 将向您发送带有此虚假消息的异常。

      【讨论】:

        【解决方案4】:

        可能不是您的情况,但是当您尝试将会话保存到未创建的 db 表中时会引发相同的错误消息。

        【讨论】:

          【解决方案5】:

          当您尝试将会话处理到 redis/couchbase 检查 session.save_handler 到 php.ini 时也会发生这种情况

          【讨论】:

            猜你喜欢
            • 2013-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-27
            • 1970-01-01
            • 1970-01-01
            • 2011-04-13
            • 1970-01-01
            相关资源
            最近更新 更多