Zend_Auth clearidentity и Zend_Session :: destroy вызывая путаницу - PullRequest
1 голос
/ 28 февраля 2012

У меня есть следующее действие выхода из системы:

public function logoutAction() {
            Zend_Auth::getInstance()->clearIdentity();
            Zend_Session::destroy();

            $this->_helper->flashMessenger->addMessage(array('success' =>
                _('You were successfully logged out.')));
            $this->_redirect('/index/index');
        }

Если я не закомментирую строку: Zend_Session :: destroy () я получаю сообщение об ошибке:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'The session was explicitly destroyed during this request, attempting to re-start is not allowed.' in /usr/local/share/php/library/Zend/Controller/Plugin/Broker.php on line 336 Zend_Session_Exception: The session was explicitly destroyed during this request, attempting to re-start is not allowed.

Iпрочитал об этой проблеме здесь и здесь , но не ясно, как мне поступить.Должен ли я просто не использовать Zend_Session :: destroy ()?Каковы будут последствия и опасности его неиспользования и какова альтернатива?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Что вызывает у вас проблемы, так это то, что сразу после уничтожения сеанса вы используете его повторно (облегчая FlashMessenger. Если вам не мешает уничтожение сеанса после выхода из системы, вы можете отобразить страницу выхода из системы вместо перенаправления на главную страницу сфлеш-сообщение.

Оставление некоторых данных сеанса в целости и сохранности после выхода пользователя из системы может иметь последствия для безопасности, но это зависит от того, что вы храните в своем сеансе и где и как вы используете данные.убедитесь, что вы не сохраняете данные, принадлежавшие зарегистрированному пользователю в вашем сеансе, просто используйте определенное пространство имен сеанса для этих данных и при выходе из системы вызовите unsetNamespace().

1 голос
/ 28 февраля 2012

Zend_Auth имеет свое собственное пространство имен сеанса, и после Zend_Auth::getInstance()->clearIdentity(); оно удаляет его, поэтому нет необходимости уничтожать все смазы сеанса, если вы их используете.

Пример того, что здесь происходит:

// logging user
$_SESSION['Zend_Auth'] = 'logged user data';
// after Zend_Auth::getInstance()->clearIdentity();
$_SESSION['Zend_Auth'] = null;
// after Zend_Session::destroy();
session_destroy();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...