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

尝试加载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):
包括('/ 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 ...,但仍然有问题。

难道有一种方法可以设置为不检查会话或类似的东西吗?

致以诚挚的问候

参考方案

它就是它所说的。 Zend_Auth尝试开始新的会话,因为尚未调用Zend_Session::start()

问题是必须在会话开始之前调用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)

php session header()重定向后丢失 - php

这是我第一次尝试创建会话。另外,成功登录后,我使用header()函数重定向页面,但是在重定向的页面上,我不再有会话。有代码:建立工作阶段:function userLogin($user){ session_start(); $_SESSION['username'] = $user; header("Location: /~…

PHP Memcached会话突然失效 - php

session.save_handler = memcached session.save_path = "127.0.0.1:11211" session.gc_maxlifetime = 86400 其余的标准。我希望自上次用户访问该页面以来,该会话至少可以保留86400秒,即,如果我在5分钟后启动了一个会话并访问了该页面,则该会话应…

视图助手中的Zend重定向 - php

嗨,我有以下脚本可在视图帮助器中重定向<?php class Application_View_Helper_ExistUserRev extends Zend_View_Helper_Abstract{ public function existUserRev($params,$user) { $businessReviewMapper = new …

json_encode网址失败 - php

有人在this bug附近吗?echo json_encode(array('url'=>'/foo/bar')); {"url":"\/foo\/bar"} 我使用Zend_Json and Zend_Json_Expr以便我甚至可以在js对象中获取回调函数-但我无法获得…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…