2012-05-09 18 views
7

Así es como me puse sesiones¿Cómo matar sesiones en zend framework?

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

y así es como lo mato

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

pero todavía mantiene el this-> sess-> admin como '1' ... $ nombre de usuario se ha ido, pero el administrador se mantiene como uno. ¿Cuál es la forma correcta de eliminar TODAS las sesiones asociadas con el cliente?

Si hago

$this->sess->admin = 0; 

entonces funciona, pero dudo que este es el camino correcto para cada variable de sesión que tengo.

También probé

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

y no funcionó, que no cerró ninguna sesión.

+0

'Zend_Session :: namespaceUnset ($ this-> sess)' primer resultado en google – Esailija

+0

¿Te gusta? setcookie ("sl", md5 (rand (10,1200)), time() - (60 * 60), "/", ". Site.com"); \t Zend_Session :: namespaceUnset ($ this-> sess); No funcionó. – Darius

Respuesta

17

Para eliminar TODAS sesiones asociadas con el uso de los clientes esto:

\Zend_Session::destroy(true); 

Esto eliminará toda la sesión y también enviar una solicitud de encabezado al cliente para eliminar las cookies asociadas con la sesión. Alternativamente, puede establecer el parámetro de este método en falso para no eliminar las cookies del usuario. Pero tenga en cuenta:

Zend_Session :: destruir (verdadero) o bien debe ser llamada antes de PHP ha enviado cabeceras HTTP, o búfer de salida debe estar habilitado. Desterrará todos de los datos persistentes asociados con la sesión actual. Sin embargo, no se ven afectadas las variables en PHP, por lo que sus sesiones de espacio de nombres (instancias de Zend_Session_Namespace) siguen siendo legibles.

para eliminar estos utilizan el siguiente enfoque:

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

Please see here for further information

4

Puede utilizar

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

Ver el manual

+0

¡Gracias! Este método funcionó. – Darius

+2

@darius Es sorprendente lo que puede descubrir al leer el [manual] (http://framework.zend.com/manual/en/reference.html). Yo tampoco sabía cómo hacerlo antes de leer su pregunta. – vascowhite

+0

Soy nuevo en Zend Framework y estaba probando los métodos en este sitio http://zendgeek.blogspot.com/2009/07/zend-framework-session-usage-and.html pero no funcionaban para mí, así que pensé que tal vez estaba poniendo el código en las secciones incorrectas o algo así. Y el manual me confunde a veces, tal vez no estoy hecho para esta cosa de programación jajaja. Una vez mas, Gracias. – Darius

10

Destruir sesión particular hacer

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

Esa es probablemente una mejor opción que la mía en este caso. +1 – vascowhite