Zend_Session не позволяет вам уничтожать и воссоздавать сеанс

Мое требование: когда сеанс изменения пользовательского агента должен уничтожить, и он должен начать новый сеанс. Но Zend_Session :: start () бросает исключение, если destroy был вызван перед 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()); 

Исключение:

Исключить исключение «Zend_Session_Exception» с сообщением «Сессия была явно уничтожена во время этого запроса, попытка повторного запуска не разрешена». в библиотеке \ Zend \ Session.php: 431

РЕДАКТИРОВАТЬ:
Причина в том, что вторая команда start () молча игнорируется, если она уже была вызвана в этом запросе. Я опубликовал вопрос, надеюсь, они его принимают.

 if (self::$_sessionStarted) { return; // already started } 

Пожалуйста, проголосуйте
http://framework.zend.com/issues/browse/ZF-11420

Ребята, я решил это сам

 try { Zend_Session::start(); } catch (Zend_Session_Exception $e) { Zend_Session::destroy(true); $this->bootstrap('frontController'); $front = $this->getResource('frontController'); $front->setRequest(new Zend_Controller_Request_Http()); $front->setResponse(new Zend_Controller_Response_Http()); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->gotoUrl($front->getRequest()->getRequestUri(),array('prependBase' => false)); } 

Почему вы пытаетесь перезапустить сеанс? Просто перенаправите пользователя на экран входа в систему после вызова destroy()

РЕДАКТИРОВАТЬ:

Zend_Session работает по-другому, чем обычные php-сессии, и, следовательно, почему это приемлемо в php ванили, а не в Zend Framework.

Проверка виновника находится здесь:

 if (self::$_sessionStarted && self::$_destroyed) { require_once 'Zend/Session/Exception.php'; throw new Zend_Session_Exception('The session was explicitly destroyed during this request, attempting to re-start is not allowed.'); } 

Вы можете попробовать прокомментировать этот фрагмент кода в Zend_Session и посмотреть, как он себя ведет, хотя его очень вероятно, что это было сделано по определенной причине.