2012-05-09 10 views
7

ten sposób ustawić sesjeJak poprawnie zabić sesje w Zend Framework?

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

I to jest, jak się zabić go

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

ale nadal utrzymuje $ this-> sess-> admin jako '1' ... nazwę użytkownika już nie ma, ale admin pozostaje jako jeden. Jaki jest poprawny sposób usuwania WSZYSTKICH sesji skojarzonych z klientem?

Jeśli robię

$this->sess->admin = 0; 

Wtedy to działa, ale wątpię, to jest właściwa droga dla każdej zmiennej sesji, że trzymam.

Próbowałem też

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

i to nie działa, to nie zamknąć wszystkie sesje.

+0

'Zend_Session :: namespaceUnset ($ this-> Sesja)' pierwszy wynik w google – Esailija

+0

Jak to? setcookie ("sl", md5 (rand (10,1200)), czas() - (60 * 60), "/", ". Site.com"); \t Zend_Session :: namespaceUnset ($ this-> sess); To nie zadziałało. – Darius

Odpowiedz

17

Aby usunąć WSZELKIE sesje związane z wykorzystaniem klienta to:

\Zend_Session::destroy(true); 

To usunie całą sesję, a także wysyłać żądanie nagłówka do klienta, aby usunąć wszelkie pliki cookie związane z sesją. Alternatywnie można ustawić parametr tej metody na false, aby nie usuwać plików cookie użytkownika. Ale uwaga:

Zend_Session :: zniszczyć (true) muszą być wywołana przed PHP wysłał nagłówki HTTP lub buforowanie wyjścia musi być włączona. Spowoduje to zniszczenie trwałych danych powiązanych z bieżącą sesją. Jednak zmienne w PHP nie mają wpływu na zmienne, więc sesje nazwane (wystąpienia Zend_Session_Namespace) pozostają czytelne.

Aby usunąć te wykorzystują następujące podejście:

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

Please see here for further information

4

Można użyć

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

Zobacz manual

+0

Dziękuję! Ta metoda zadziałała. – Darius

+2

@darius Zaskakujące jest to, czego można się dowiedzieć czytając [podręcznik] (http://framework.zend.com/manual/en/reference.html). Nie wiedziałem, jak to zrobić, zanim przeczytam twoje pytanie. – vascowhite

+0

Jestem nowy w Zend Framework i próbowałem metod na tej stronie http://zendgeek.blogspot.com/2009/07/zend-framework-session-usage-and.html, ale nie działały dla mnie, więc pomyślałem, że mogę umieścić kod w niewłaściwych sekcjach lub coś w tym stylu. I podręcznik czasami mnie dezorientuje, może nie jestem wycięty dla tego programowania rzeczy lol. Jeszcze raz Ci dziękuję. – Darius

10

zniszczyć szczególną sesję zrobić

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

To chyba lepsza opcja niż moja w tym przypadku. +1 – vascowhite