尝试加载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(真)
#1 / www / htdocs /w00a1ed7 / autospin / redaktion / library / Zend / Auth / Storage / Services.php(87): Zend_Session_Namespace-> __构建体( 'Zend_Auth的')
#2 /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Auth.php(91): Zend_Auth_Storage_Session-> __构建体()
#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函数:
protected $ user;
public function init()
{
if(!Zend_Auth::getInstance()->hasIdentity())
{
$this->_redirect('auth/login');
}else
{
$this->user = Zend_Auth::getInstance()->getIdentity();
}
}
我已经尝试仅在indexAction中设置tis代码,以便其他操作不必查看Auth ...但仍然有问题。
我有没有办法在Action中设置不检查会话或这样的想法?
Beste问候
答案 0 :(得分:18)
在你激动之前,你的代码可能没什么问题!
检查你的application.ini以获取会话保存路径,对我而言 APPLICATION_PATH'/ session'
现在检查您是否拥有正确的权限! 如果没有,则cd进入应用程序文件夹并键入
sudo chmod 777 session sudo chown -R [usernamehere] session sudo chgrp -R [usernamehere] session
工作完成!
答案 1 :(得分:15)
这就是它所说的。 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)
答案 2 :(得分:11)
我有同样的错误。在本地机器上,一切正常。在服务器上没有。
我的解决方案是在运行bootstrap之前将Zend_Session::start();
放在index.php中。所以它看起来像这样:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
error_reporting(E_ALL);
ini_set("display_errors", 1);
Zend_Session::start();
$application->bootstrap()->run();
答案 3 :(得分:3)
产生此问题有三个主要原因:
在大多数情况下,第二个选项是原因。
答案 4 :(得分:2)
如果您正在使用 RPCL 库( RADPHP )开发应用程序,并且您收到此错误:
应用程序引发了一个异常类Zend_Session_Exception,消息'session已经由session.auto-start或session_start()'启动,
然后这是我的解决方案。
你会惊讶它有多简单。简单包括行
require_once( “zcommon.inc.php”);
在包含 ZAuth 组件的文件中打开PHP标记之后 - 通常这是具有 DataModule 形式的文件。当然要确保文件 zcommon.inc.php 在您的路径中。这将确保Zend会话首先启动而不是RPCL会话。
还要确保应用程序中php文件的名称与包含类的名称相对应。
答案 5 :(得分:2)
我想提请你注意垃圾收集问题,这里解决了Issues with PHP 5.3 and sessions folder或http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage。
修复'会话已经启动'后我遇到了GC错误。我怀疑GC错误可能是会话错误的根本原因,至少在某些情况下。到目前为止,我还没有足够的时间进行彻底调查,但请注意GC和会话错误是否也与您的情况有关。
答案 6 :(得分:1)
有同样的错误。只有在同一时间使用同一会话的两个实例时才会出现(例如,两个浏览器实例同时加载)。这是因为php无法同时处理具有相同ID的两个打开会话。
答案 7 :(得分:1)
对于从一台服务器移动到另一台服务器的人。另一个问题可能是apache运行的用户。我在我的旧盒子上运行了一个不同的用户。我使用了旧的httpd.conf中的配置,忘了更新/ var / lib / php / session上的权限以反映不同的用户。
为了测试,我将perms更改为777.一切正常,错误消失了:
# cd /var/lib/php
# chmod 0777 session
所以我退回了烫发并改变了小组。当然,将newApacheUser更改为您在IF NOT apache上运行httpd的用户帐户。
# chmod 0770 session
# chown root:newApacheUser session
要查看您是否还有此问题:
致命错误:未被捕获的异常'Zend_Session_Exception',消息'session已由session.auto-start或session_start()启动
答案 8 :(得分:1)
如果有任何使用,我通过从我的application / config / application.ini中取出与会话相关的行来清除此错误
;resources.session.save_path = APPLICATION_PATH "/../data/session"
;resources.session.use_only_cookies = true
;resources.session.remember_me_seconds = 3600
感谢chelmertz了解问题原因。
答案 9 :(得分:1)
答案 10 :(得分:1)
该问题可能与session.save_path
有关。您可以尝试ini_set('session.save_path', 'path-to-your-session-storage-directory');
答案 11 :(得分:0)
我遇到了同样的问题并搜索了所有的帖子,包括这个帖子我找不到答案,直到我发布了虽然我有相同的异常结果,但我的错误是由完全不同的事情造成的。
我实际上遇到了自动加载问题。由于Bootstrap中的问题我相信这会导致上面的异常被显示(隐藏真正的错误)。
因此,如果您完成了所有其他可能的修复,请尝试在Bootstrap中注释掉详细信息,看看是否会让您解决此问题。很明显,你慢慢地带回了引导程序的不同部分,以揭示真正的问题。