2012-08-22 184 views
14

Estoy usando codeigniter como marco.Perdida de sesión después de redirigir en Codeigniter

En primer lugar, utilizo localhost pero cuando cambio a mi dirección IP, la función de inicio de sesión ya no funciona. Descubrí que la sesión se pierde después de redireccionar a otro controlador.

Aquí es el resultado de print_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1 
[last_activity] => 1285962398 
[user_data] => 

Como se puede ver que no tiene ningún datos pasados ​​a user_data pero fue puesto delante de redirigir cuando pruebo.

Separa el controlador a dos, el primero es usuarios -> manejador de la función de inicio de sesión y otro es planificador, que manejador del enlace que redirijo del controlador del usuario.

users.php (primer controlador):

$this->load->model('users_model'); 
$this->load->model('mymodel'); 
$this->load->database(); 

$email = $this->input->post('email'); 

$pass = $this->input->post('password'); 

$type = $this->input->post('type'); 

// Authenticate the user 
$userdata = $this->users_model->auth_user($email,$pass,$type); 

if($userdata) 
{ 
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
        'LASTNAME' => $userdata->LASTNAME, 
        'EMAIL' => $userdata->EMAIL, 
        'LOGIN' =>TRUE, 'TYPE' => $type); 
    $this->session->set_userdata($data); 
    redirect('planner/view_system','refresh'); 
} 

planner.php (segundo controlador):

function __construct() { 
    parent::__construct(); 

    if (! ($this->session->userdata('LOGIN'))) 
    { 
     print_r (var_dump($this->session->userdata('FIRSTNAME'))); 
     print_r($this->session->all_userdata()); 
    } 
    $this->load->helper(array('form','html','url')); 

Y aquí es mi config

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = FALSE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = TRUE; 
$config['sess_match_useragent'] = FALSE; 
$config['sess_time_to_update'] = 300; 
+1

ocurre esto en todos los navegadores? ¿Has intentado acceder a valores de sesión desde otras funciones y luego constructor? ¿Hay algún error o aviso en su registro de errores? –

+0

No estoy seguro de si esto ayudará, pero intente cambiar sess_use_database a true? –

+0

Sí, esto sucede con todos los navegadores. No accedí al valor de otra función, redirijo directamente al planificador. No hay error – Zatanna

Respuesta

2

En primer lugar, debe asegurarse de que hay no hay caracteres especiales en los elementos de la sesión como '\ n' o '\ v'. Esos personajes pueden llevar tu cuerda a romperse en el medio. Pruebe trim() para obtener ayuda.

Si eso no sirve, tal vez se trate de un problema de codificación. Intente cifrar el elemento de la sesión antes de configurarlo y descifrarlo cuando necesite usarlo.

0

En mi caso, después de algunas pruebas (con https y http en localhost) el error viene para ese problema y no se ha configurado correctamente $ config ['cookie_secure'], por lo que puede intentar cambiar en config.php:

$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https 

¡Salud!

1

I resuelto este problema mediante la configuración de los $ config [ 'cookie_domain'] a localhost

$config['cookie_domain'] = "localhost"; 

inicialmente que tenía ese conjunto variable de nombre de dominio completamente calificado a como www.exampledomain.com pero mientras tanto yo estaba usando un servidor local.

El dominio bajo el cual se ejecuta su secuencia de comandos debe ser el mismo que el del conjunto de dominios bajo $ config ['cookie_domain] para evitar fallas inesperadas con la clase de sesión codeigniter.

0

Desde mi experiencia, los problemas pueden ser:

  1. uno (o más) de los archivos no es 'UTF-8 con la lista de materiales' (si su sitio web no será sólo Inglés y utilizar UTF -8 como codificación como la mía). Debe cambiar todos los archivos a 'UTF-8 con BOM'. Notepad ++ te ayudará.
  2. hay algunos caracteres antes de la etiqueta php o después?> (¿Mejor toma?>). Asegúrese de que no haya ningún espacio que incluya espacios.
  3. Cuando llame a localhost/xxxxxx como la dirección, cámbielo a 127.0.0.1/xxxxxx o su LAN IP
  4. Siempre almaceno sesiones en DB en lugar de archivo (más fácil para la depuración).
1

Soy tienen problema similar, y resultó que el problema es muy común la ...

raíz del mal de mis problemas eran los nombres que contienen el carácter "_"

ejemplo, antes era

$this->session->set_flashdata('message_success', 'some message'); 

después se convirtió en

$this->session->set_flashdata('messagesuccess', 'some message'); 

Mi problema resuelto Gracias hombre con este recurso http://biostall.com/losing-codeigniter-sessions/

0

Mismo problema conmigo.

Compruebe que ha cargado la biblioteca de sesión en el controlador.

$this->load->library('session'); 
-1

perdida de sesión después de redirigir en CodeIgniter

me encontré con el problema también.

Aún así ha encontrado el problema. Tenga en cuenta la dirección de la sesión del codeigniter. Cuando su navegador visitó su sitio web y actualizó algunas veces, codeigniter generó más archivos de sesión bajo la dirección de sesión del codeigniter.

Devuelve la sesión de la biblioteca de carga en su archivo de controlador.

Consulte la siguiente configuración de config.php.

enter image description here

Cuando cambia el acerca de la configuración, por favor, eliminar o borrar todos los datos fuera de línea de su navegador y todos los archivos de sesiones de la CodeIgniter. Entonces intentas hacer de nuevo. Es tal vez reparar el problema.

Si aún no puede reparar el problema. Puede descargar el paquete codeigniter de codeigniter.org nuevamente y luego extraer el paquete para probar el entorno.

0

Me sorprendió al principio cuando encontré este problema. Me pasó porque mis datos de sesión tenían un signo @.

La solución es simplemente codificar los datos usando base64_encode.

Ej:

$Data = urlencode( base64_encode($Email)); 
$this->session->set_userdata('Data', $Data); 

Y para volver a utilizarlo, basta con hacer esto:

$Data = base64_decode(urldecode($this->session->userdata('Data'))); 

Espero que esto ayude.

0

Debe agregar algo a su archivo autoload.php.

$autoload['libraries'] = array('database','session');

esto va a resolver su sesión de redirección problema

Cuestiones relacionadas