2012-05-09 3 views
7

Ecco come ho impostato le sessioniCome uccidere correttamente le sessioni nel framework zend?

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

e questo è come mi uccido

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

ma mantiene ancora il this-> sess-> admin come '1' ... nome utente $ se n'è andato ma l'amministratore rimane come uno. Qual è il modo corretto di cancellare TUTTE le sessioni associate al client?

Se faccio

$this->sess->admin = 0; 

allora funziona, ma dubito che questo sia il modo giusto per ogni variabile di sessione che tengo.

Ho anche provato

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

e non ha funzionato, ma non ha chiuso tutte le sessioni.

+0

'Zend_Session :: namespaceUnset ($ this-> sess)' primo risultato su google – Esailija

+0

Ti piace così? setcookie ("sl", md5 (rand (10,1200)), ora() - (60 * 60), "/", ". Site.com"); \t Zend_Session :: namespaceUnset ($ this-> sess); Non ha funzionato. – Darius

risposta

17

Per eliminare TUTTI sessioni associati all'utilizzo cliente questo:

\Zend_Session::destroy(true); 

Questo cancellerà l'intera sessione e anche inviare una richiesta di intestazione al client per rimuovere eventuali cookie associati alla sessione. In alternativa, puoi impostare su false il parametro di questo metodo per non eliminare i cookie dell'utente. Ma si prega di notare:

Zend_Session :: distruggere (vero) deve o essere chiamato prima di PHP ha inviato intestazioni HTTP, o buffer di uscita deve essere attivata. Destatterà tutto il dei dati persistenti associati alla sessione corrente. Tuttavia, non sono interessate variabili in PHP, quindi le sessioni con nomi assegnati (istanze di Zend_Session_Namespace) rimangono leggibili.

per rimuovere questi utilizzare il seguente approccio:

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

Please see here for further information

4

È possibile utilizzare

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

Vedere la manual

+0

Grazie !! Questo metodo ha funzionato. – Darius

+2

@darius È sorprendente ciò che è possibile scoprire leggendo il [manuale] (http://framework.zend.com/manual/en/reference.html). Non sapevo come farlo prima di leggere la tua domanda. – vascowhite

+0

Sono nuovo di Zend Framework e stavo provando i metodi su questo sito http://zendgeek.blogspot.com/2009/07/zend-framework-session-usage-and.html ma non stavano lavorando per me, quindi ho pensato che forse stavo mettendo il codice nelle sezioni sbagliate o qualcosa del genere. E il manuale mi confonde a volte, forse non sono tagliato fuori per questa roba di programmazione lol. Ancora una volta grazie. – Darius

10

Distruggere particolare sessione fare

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

Questa è probabilmente un'opzione migliore della mia in questo caso. +1 – vascowhite