2011-12-23 21 views
6

Tengo un controlador de cierre de sesión en CodeIgniter:Salir CodeIgniter

<?php 

class Logout extends MY_Controller { 

    function index() 
    { 

     $this->session->sess_destroy(); 
     redirect('index.php'); 
    } 
} 

Esto me cierra la sesión, pero cuando llamo otro controlador después de la explotación, así como "/ site/addnewpost", esto sólo me abre una sesión de nuevo, como si la sassion no había sido destruida previamente. ¿Por qué está pasando esto?

+0

eliminar la redirección. hacer otra secuencia de comandos que contenga solamente 'var_dump ($ _ SESSION)' y llamar a esa secuencia de comandos después de cerrar la sesión para comprobar si la sesión realmente se destruye – xbonez

+0

¿cuál es su parte de inicio de sesión? (en el que verifica la sesión) – ALH

+0

@xbonez - Corrígeme si me equivoco aquí, pero pensé que CodeIgniter no usa la sesión PHP nativa. – Tyil

Respuesta

11

Siga la sugerencia de Alex, pero utilizando el código de CI :). Lo que quiero decir es que intentes desarmar los datos de cada sesión individualmente. Leí una vez sobre un problema en la versión 2.0.3, creo, pero ahora no lo recuerdo y no tengo tiempo para buscar la referencia. Está en su foro, sin embargo, y la sugerencia era la misma: desarmar cada elemento de la sesión uno por uno.

$this->session->unset_userdata('data_one'); 
$this->session->unset_userdata('data_two'); 
$this->session->unset_userdata('data_three'); 
$this->session->unset_userdata('data_one'); 
$this->session->sess_destroy(); 
redirect('home','refresh'); // <!-- note that 
//you should specify the controller(/method) name here 

Usted necesidad de reorientar porque la sesión de CI son sólo las cookies, no el nativo de matriz sesión php.

Otra cosa ... asegúrese de que la falla no esté en sus métodos de inicio de sesión, ¡que lo registran sin importar si cierra la sesión con éxito o no!

+0

¡Gracias, gracias! –

2

Trate de eliminar explícitamente este tipo de elementos:

$this->Session->delete('User'); 
$this->Session->destroy(); 
$this->Cookie->delete("User"); 
$this->Cookie->destroy(); 
$this->Auth->logout(); 
$this->redirect('whereever'); 
1

Mi problema tiene que ver con el almacenamiento en caché en el lado del servidor. El más rápido que pude solucionarlo fue añadiendo texto aleatorio al enlace de desconexión:

<?php 
    $this->load->helper('string'); 
    echo anchor('/home/logout/'.random_string(), 'logout'); 
?> 

Inicio/cierre de sesión contenía el mismo código que function index en la pregunta.

Para que sepas que el redirect('/', 'refresh') no funcionó, pero una vez más hice una prueba rápida.

Supongo que el método random_string() se puede reemplazar dando como resultado encabezados que fuercen la eliminación de la memoria caché, etc. Como ya habrá adivinado, no puedo hacer eso ahora porque estoy muy ocupado. Quizas mas tarde.

1

También puedes intentar configurar manualmente tu "logged_in" o lo que sea que llames la sesión en falso. Luego, destruyendo todos los demás datos de la sesión.

$this->session->set_userdata('logged_in', FALSE); 
    $this->session->session_destroy(); 
    redirect('index'); 
0

primero tenemos que cargar la biblioteca de sesiones para tratar con la sesión que desarmar el ID de sesión y destruir la sesión. Estoy usando este código para desarmar mi sesión y asegurar el cierre de sesión.

$this->load->library('session'); 
$this->session->set_userdata('user_id', FALSE); 
$this->session->sess_destroy(); 
$this->load->view('your URL'); 
+0

No publique respuestas de solo código. Incluya alguna explicación de lo que ha cambiado, por qué funciona, etc. –