I get this error when trying to load a Zend Framework application:
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php:462
Stack trace:
#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 in /www/htdocs/w00a1ed7/autospin/redaktion/library/Zend/Session.php on line 462
I Use Zend_Auth
and on my local server and it works well, but on a production server I get the preceding error, but not every time.
I have checked that session.autostart
is set to 0
in the .htaccess
file.
How do I fix this error?
Thank you for your Answer, but I do not user session_start() anywhere. Work only with ZF.
I Have this Problem only on shared server, on my local server script works perfectly.
I Use INIT Function with this code:
protected $user;
public function init()
{
if(!Zend_Auth::getInstance()->hasIdentity())
{
$this->_redirect('auth/login');
}else
{
$this->user = Zend_Auth::getInstance()->getIdentity();
}
}
I allready try to set tis code only in indexAction, so that other actions do not have to chack the Auth... but still have problems.
Ist there a way to set in an Action to do not check about session or somethink like this?
Beste regards
I had the same error. On local machine, everything worked fine. On server not. My solution was to put
Zend_Session::start();
in the index.php before running bootstrap. So that it looks like this:In case this of any use, I cleared this error by taking out session related lines from my application/config/application.ini
Thanks to chelmertz for the insight into the cause of the problem.
I'd like to draw your attention to the garbage collection problem, solved here Issues with PHP 5.3 and sessions folder or http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage.
After fixing the 'session has already been started' I encountered the GC bug. I suspect that the GC bug might be the root cause for the session bug at least in some instances. So far I have not had enough time to investigate thoroughly, but please comment if GC and session bug are related in your case as well.
I had the same problem and searching through all of the posts including this one I couldn't find an answer until I released that although I had the same exception result, my error was caused by something completely different.
I actually had an issue with autoloading. Because of the problem during Bootstrap I believe this caused the exception above to be shown (hiding the real error).
So if you went through all of the other possible fixes, try commenting out the details in your Bootstrap and see if that gets you past this problem. Obviously you slowly bring back the different parts of the bootstrap to uncover the real problem.
It's what it says it is.
Zend_Auth
tries to start a new session, sinceZend_Session::start()
has not yet been called.The problem is that
Zend_Session::start()
has to be called before a session is started. But, since session.autostart is 0 (btw this is in php.ini not .htaccess), you have probably writtensession_start();
somewhere. You're not allowed to do that, since ZF wishes to have full control over sessions, i.e. you shouldn't access the global session variable directly.To solve it, search your code files for
session_start()
and eithererror_reporting(E_ALL|E_STRICT);
Zend_Session::start();
at all placesIf you can't find all occurrences, find the one session_start(); that bothers your
Zend_Auth::getInstance()->hasIdentity()
and solve the problem quick n' dirty with the following snippetIf you're using ZF in your whole application, I would go with 2)