2012-02-28 48 views
1

我有以下的退出動作:Zend_Auth的clearidentity和由Zend_Session ::破壞造成混亂

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. 

我已閱讀過關於這個問題的內容herehere,但仍不清楚我應該如何繼續。我應該不使用Zend_Session :: destroy()嗎?不使用它的含義和危險是什麼,以及有什麼選擇?

回答

2

是什麼原因導致你的問題是,這種權利破壞會議結束後,要重複使用它(通過促進以FlashMessenger如果註銷困擾你後不破壞會話,你可能會顯示一個註銷頁面,而不是用閃光消息重定向到您的首頁。

在用戶註銷後保留一些會話數據可能會影響安全性,但這取決於您在會話中存儲的內容以及在哪裏以及你如何使用這些數據。爲了確保你沒有保存數據,屬於會話中登錄的用戶,只需使用特定會話命名空間來處理此數據,並在註銷時調用unsetNamespace()

+0

謝謝,我生活中可以沒有調用閃光信使。 – dimbo 2012-02-28 12:25:19

1

Zend_Auth的有它自己的會話命名空間和Zend_Auth::getInstance()->clearIdentity();後,刪除它,所以沒有必要,如果你用它來消滅所有會話nemaspaces。

例什麼這裏發生了:

// logging user 
$_SESSION['Zend_Auth'] = 'logged user data'; 
// after Zend_Auth::getInstance()->clearIdentity(); 
$_SESSION['Zend_Auth'] = null; 
// after Zend_Session::destroy(); 
session_destroy();