【发布时间】:2011-10-11 18:14:17
【问题描述】:
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /usr/include/ZendFramework-1.11.3/library/Zend/Session.php on line 462
每次重新加载都会发生这种情况。我做过的事情:
- 确保我的 php.ini 中的 session.autostart=0
- 在我的整个应用程序中搜索对 session_start() 的调用,没有
-
在我的 config.ini 中放置了以下会话配置信息:
resources.session.save_path = APPLICATION_PATH "/../data/session" resources.session.use_only_cookies = true resources.session.remember_me_seconds = 864000 从我的 config.ini 中删除了上述内容,没有任何影响
- 重启 apache,几次
- 最后我只使用了 Zend_Session_Namespace(),它在我的控制器的
init()函数中初始化。
我每次都遇到这个错误。是什么赋予了?还有什么我没有检查的?我的应用程序(在 Zend 库之外)中甚至存在“会话”一词的唯一位置是在这个控制器中:
<?php
class ContributeController extends Zend_Controller_Action
{
private $_session;
private function getSession() {
return $this->_session;
}
public function init()
{
$this->_session = new Zend_Session_Namespace('contribute');
}
public function indexAction()
{
// action body
}
public function addAction() {
$this->getSession()->form = new Application_Form_Contribute_Add_Main();
$this->view->form = $this->getSession()->form;
}
public function importAction() {}
}
?>
这是我的 php.ini 的 grep 搜索 ^session:
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
session.auto_start,显然是关闭了。
为什么我每次都收到这个错误?这是怎么回事?
编辑 目前看来,这是由于在我尝试存储该表单时尝试在会话中存储太多而引起的。当我重写我的代码以存储一个非常简单的数组来概述表单的结构时,错误消失了并且没有返回。如果它再次出现,我可能会回到这里,但我不确定它是否还不会。
【问题讨论】:
-
你能解释一下“每次重新加载都会发生”吗?
-
@Adrian World - 我认为他的意思是“在每次请求时”,或者每次他点击页面时。
-
@Adrian World karim79 是正确的。
-
因为你已经为
session.auto-startgrep 了你的php.ini(提示:检查phpinfo()以及源代码它是一个PHP_INI_ALL设置),你可以另外grepsession_start的来源也是如此。 -
嗯,
<?php标签前的空格或 bom 签名呢?
标签: php zend-framework session