2010-03-15 16 views
8

Así que configuré una página de inicio de sesión que verifica las credenciales del usuario y luego establecí los datos de sesión de codeigniter 'email' e 'is_logged_in' y algunos otros elementos. La primera página después del inicio de sesión, los datos están accesibles. Después de esa página, ya no puedo acceder a los datos de la sesión. De hecho, si intento volver a cargar esa primera página, los datos de la sesión desaparecen.Codeigniter Session Data no disponible en otras páginas después del inicio de sesión

He intentado guardarlo en la base de datos, almacenarlo sin cifrar (mala idea, lo sé, pero fue para solucionar problemas) y almacenarlo encriptado. He cargado automáticamente la biblioteca de la sesión en config.php.

He aquí un ejemplo del código que estoy usando para establecer los datos de sesión:

$data = array(
        'email' => $this->input->post('username'), 
        'is_logged_in' => true 
       ); 
       $this->session->set_userdata($data); 

Y para recuperarlo, estoy usando:

$this->session->userdata('email'); 

O

$this->session->userdata('is_logged_in'); 

He trabajado mucho con PHP y cookies, y sesiones anteriores, pero este es mi primer proyecto con Codeigniter y estoy perplejo.

¿Podría tener algo que ver con problemas de directorio? Tengo la página de inicio de sesión y el proceso controlados por un controlador de 'inicio de sesión', y luego se redirige a un controlador 'sitio'.

Gracias por su ayuda, por favor avíseme si necesito aclarar algo.

+0

¿Ha visto en la tabla de la base de datos que la entrada del usuario conectado se agrega o no en la tabla ci_sessions? Y matriz JSON para la columna que almacenó –

+0

Utilice esta biblioteca de sesión nativa: AlamoPS

+0

Desactivo las contramedidas CSRF y XSS en config.php cuando estoy desarrollando. También apague la seguridad de las cookies en Dev. Simplemente no empuje su archivo Dev config.php a Prod. –

Respuesta

6

Su código se ve bien. He tenido numerosos problemas con la biblioteca de sesiones de Codeigniter, incluido algo similar a lo que mencionaste.

Considere la posibilidad de mirar la biblioteca Native Session para resolver su problema.

+0

¡Gracias, eso parece haber solucionado el problema! Prefiero usar sesiones PHP nativas de todos modos. – jswat

+0

Me alegro de que haya ayudado. ¡No estoy demasiado enamorado del manejo de sesión de Codeigniter! –

+0

Tengo el mismo problema con un nuevo proyecto de CI que estoy haciendo ... Es muy extraño ya que todos los otros proyectos funcionan bien con la sesión en la base de datos. Usar trabajos nativos, pero es frustrante. –

0

También soy nuevo en el código de encendedor. Juz para dar una idea. ¿Has puesto session_start() en tu controlador? aquí está el ejemplo:

clase CUser extiende Controller {

function Cuser() 
{ 
    parent::Controller(); 
    session_start(); 
    $this->load->helper('url');  
} 

}

tal vez im mal ... pero u puede probarlo ... :)

+0

Gracias, pero Codeigniter no usa la sesión PHP tradicional. De hecho, almacena sus datos de "sesión" en las cookies (o en una base de datos si lo tienes configurado). Por lo tanto, no es necesario agregar el código session_start(). La solución que John McCollum dio solucionó mi problema. ¡Gracias! – jswat

4

Sólo para que cualquier otra persona tratando de usar las sesiones de CI tiene algo que probar:

He estado buscando una solución al mismo problema, y ​​después de muchos callejones sin salida, volví a investigar mi config.php.

Ahí, noté que $config['cookie_domain'] no estaba configurado correctamente. Al configurar esto (y estableciendo mi cookie_prefix en ''), las sesiones ahora funcionan correctamente.

Dado que la cookie debe establecerse en su dominio para que se pueda extraer correctamente, simplemente no encontró una referencia de cookie para mi sesión y crea una nueva cada vez.

(Configuración de sesiones de base de datos ayudaron inmensamente con calcular esto.)

2

Si alguien se encuentra con este problema, vaya a config/config.php y asegúrese de que $config['sess_use_database'] esté establecido en TRUE. Esto guardará todos los datos de la sesión en su base de datos, lo que funcionó para mí.

Si usted no tiene una tabla llamada 'sesiones', ejecute este comando SQL:

CREATE TABLE `sessions` (
`session_id` VARCHAR(40) NOT NULL DEFAULT '0', 
`ip_address` VARCHAR(16) NOT NULL DEFAULT '0', 
`user_agent` VARCHAR(120) DEFAULT NULL , 
`last_activity` INT(10) UNSIGNED NOT NULL DEFAULT '0', 
`user_data` TEXT NOT NULL , 
PRIMARY KEY ( `session_id`) , 
KEY `last_activity_idx` ( `last_activity`) 
) ENGINE = MYISAM DEFAULT CHARSET = utf8; 
+0

Tengo esta tabla y guardo datos en ella con sesiones vacías. Los datos de la sesión no están disponibles. Luego puse $ config ['sess_use_database'] \t = FALSE; . Entonces funcionó bien. –

0

mente para comprobar su nombre de la cookie. No puede tener puntos en ella.

Bad Cookie: .dominio.com

Buena cookie: domaincom

0

¿Por qué no se utiliza autenticación de iones para la seguridad y para los datos de la sesión ... siempre que el uso cuando quiero crear una software con inicio de sesión. También necesita crear una tabla en su base de datos con sesión de nombre. Y vaya a los archivos de configuración y de base de datos en la carpeta de Configuración y ponga en verdadero la sesión donde quiera para la base de datos. No ha leído bien la documentación

Cuestiones relacionadas