2012-02-11 24 views
6

Estoy intentando averiguar cómo funcionan las sesiones en Codeigniter. Leyendo el manual en línea, veo lo siguiente:Cómo funcionan las sesiones en Codeigniter

Si los datos de las sesiones no existen (o si han expirado) se creará una nueva sesión y se guardará en la cookie. Si existe una sesión, su información se actualizará y la cookie se actualizará. Con cada actualización, el session_id se regenerará.

y

Nota: Las cookies de sesión única se actualiza cada cinco minutos de manera predeterminada para reducir la carga del procesador. Si vuelve a cargar una página varias veces, notará que el tiempo de "última actividad" solo se actualiza si han transcurrido cinco minutos o más desde la última vez que se escribió la cookie. Esta vez se puede configurar cambiando la línea $ config ['sess_time_to_update'] en su archivo system/config/config.php.

Pregunta:

  1. ¿Qué información se actualiza si existe una sesión cuando se carga una página con clase de sesión? ¿Es esta la identificación de la sesión almacenada en la cookie, o los datos de la sesión almacenados en la base de datos?
  2. Las cookies de sesión solo se actualizan cada 5 minutos. ¿Qué pasa si el usuario va de la página A a la página B en 5 minutos, y esto requiere la adición de nuevos datos de sesión? Lógicamente, los datos de la sesión deberían actualizarse, así que supongo que estoy entendiendo esta línea erróneamente ... En este caso, supongo que la cookie de sesión obtiene una nueva identificación de sesión cada 5 minutos.

¡Todas las aclaraciones ayudarán!

+0

También estoy teniendo una confusión. y debo decir un comportamiento extraño en CI 1.7.2. Cuando uso la aplicación de sesión de tipo DB funciona bien. pero en el caso de DB, el tipo falso hace que la aplicación sea muy lenta. ¿alguna sugerencia? –

Respuesta

2

Sí, se trata de la identificación de la sesión almacenada en la cookie. Esto se regenera cada 5 minutos. Y cuando llegue el momento de regenerar, primero obtendrá los datos de la sesión actual y luego los asignará a la nueva identificación de la sesión.

código de la biblioteca sesión de CI, la función sess_update():

// Save the old session id so we know which record to 
// update in the database if we need it 
$old_sessid = $this->userdata['session_id']; 
$new_sessid = ''; 
while (strlen($new_sessid) < 32) 
{ 
    $new_sessid .= mt_rand(0, mt_getrandmax()); 
} 

// To make the session ID even more secure we'll combine it with the user's IP 
$new_sessid .= $this->CI->input->ip_address(); 

// Turn it into a hash 
$new_sessid = md5(uniqid($new_sessid, TRUE)); 

// Update the session data in the session data array 
$this->userdata['session_id'] = $new_sessid; 
$this->userdata['last_activity'] = $this->now; 
+0

realmente gracias por esta información útil, y SO por amor a la programación. –

Cuestiones relacionadas