My requirement is, When user agent change session should destroy, and it should start new session. But Zend_Session::start() is throwing an exception if destroy was called before start().
try {
Zend_Session::start();
} catch (Zend_Session_Exception $e) {
Zend_Session::destroy(true);
Zend_Session::start(); // breaking here
Zend_Session::regenerateId();
}
Zend_Session::registerValidator(new Zend_Session_Validator_HttpUserAgent());
Exception:
Uncaught exception 'Zend_Session_Exception' with message 'The session was explicitly destroyed during this request, attempting to re-start is not allowed.' in library\Zend\Session.php:431
EDIT:
The reason is the second start() command is silently ignored if it was already called in that request. I have posted an issue, Hope they accept it..
if (self::$_sessionStarted) {
return; // already started
}
Please vote it
http://framework.zend.com/issues/browse/ZF-11420
Why are you trying to restart the session? Just redirect the user to the login screen after calling
destroy()
EDIT:
Zend_Session works differently from regular php sessions and hence why this is acceptable in vanilla PHP and not Zend Framework.
The culprit check is here:
You could try commenting out this chunk of code in Zend_Session and seeing how it behaves, although its highly likely this has been done for a specific reason.
Guys I have solved it my self