2012-05-09 81 views
7

這是我如何設置會話如何正確地殺死zend框架中的會話?

$this -> sess = new Zend_Session_Namespace('user'); 
$this -> sess -> username = "Bob"; 
$this -> sess -> admin = "1"; 

而且這是我殺了它

setcookie("mycookiename",md5(rand(10,1200)),time() - (60 * 60),"/",".site.com"); 
$_SESSION = array(); 
session_destroy(); 
$this -> _redirect('/'); 

,但它仍然保持了$這個 - > sess->管理爲「1」 ...用戶名已經不存在了,但管理員仍然是一個。刪除與客戶端關聯的所有會話的正確方法是什麼?

如果我做

$this->sess->admin = 0; 

然後,它的工作原理,但我懷疑這是我保持每個會話變量的正確方法。

我也試過

setcookie("mycookiename",md5(rand(10,1200)),time() - (60 * 60),"/",".site.com"); 
Zend_Session::namespaceUnset($this->sess); 

,並沒有工作,也沒有關閉任何會話。

+0

'了Zend_Session :: namespaceUnset方法($這個 - > SESS)'第一個結果在谷歌 – Esailija

+0

像這樣? (「s1」,md5(rand(10,1200)),time() - (60 * 60),「/」,「。site.com」); \t Zend_Session :: namespaceUnset($ this-> sess); 它沒有工作。 – Darius

回答

17

要刪除與客戶使用相關的所有會議這樣的:

\Zend_Session::destroy(true); 

這會刪除整個會話,併發送向客戶端發送頭部請求以刪除與會話相關的任何Cookie。您也可以將此方法的參數設置爲false以不刪除用戶cookie。但請注意:

必須在PHP發送之前調用Zend_Session :: destroy(true) 必須啓用HTTP標頭或輸出緩衝。它將破壞與當前會話相關的持久性數據的所有 。但是, PHP中的變量不受影響,因此您的名稱空間會話 (Zend_Session_Namespace的實例)仍然可讀。

要刪除這些用下面的辦法:

$ns = 'auth' 
$namespace = new \Zend_Session_Namespace($ns); 
$namespace->unsetAll(); 

Please see here for further information

4

您可以使用

Zend_Session::destroy($remove_cookie = true, $readonly = true); 

manual

+0

謝謝!這種方法奏效。 – Darius

+2

@darius通過閱讀[手冊](http://framework.zend.com/manual/en/reference.html)可以發現什麼是令人驚訝的。在閱讀你的問題之前,我不知道該怎麼做。 – vascowhite

+0

我是Zend Framework的新手,正在嘗試使用此網站上的方法http://zendgeek.blogspot.com/2009/07/zend-framework-session-usage-and。HTML但他們不適合我,所以我想也許我把代碼放在錯誤的部分或其他東西。這本手冊有時讓我感到困惑,也許我不會因爲這個編程的東西而被剪掉。再一次,謝謝你。 – Darius

10

摧毀特定的會話做

Zend_Session::namespaceUnset('user'); 
+0

在這種情況下,這可能是比我更好的選擇。 +1 – vascowhite