La librería Session

CodeIgniter nos proporciona una interfaz orientada a objetos para utilizar la gestión de sesiones. Dicha gestión es similar a la proporcionada por las sesiones nativas de PHP pero con algunas diferencias. Por defecto, los datos almacenados en sesión se guardan en una cookie aunque también podemos guardarlos en una tabla de base de datos como veremos a continuación.

La clase Session no utiliza las sesiones nativas de PHP ya que genera sus propios datos de sesión. Según el manual ofrece mayor flexibilidad para los desarrolladores aunque todos los desarrolladores prefieren almacenar las Sesiones en una tabla de Base de datos.

Ojo, aunque no usemos cifrado de sesiones, es necesario definir una clave de cifrado en el archivo de configuración que se utiliza para prevenir la manipulación de datos de sesión.

A continuación podéis ver un ejemplo de clave de cifrado generada por la página siguiente: Codeigniter encryption key generator/ (también podéis usar la página Random Key Generator)

/* Location: ./application/config/config.php */
$config['encryption_key'] = 's9CZ4e3favkRnbhQgqxrBhnaFhAosG1g';

De forma predeterminada, las sesiones de CodeIgniter almacenan el identificador de sesión, la dirección IP, el user agent (navegador) y el último acceso del usuario como marca de tiempo. Por motivos de rendimiento, las marcas de tiempo sólo se actualizan cada 5 minutos, así los robots y las recargas de página no causan sobrecargas en nuestro servidor.

[array]
(
   'session_id' => random hash,
   'ip_address' => 'string - user IP address',
   'user_agent' => 'string - user agent data',
   'last_activity' => timestamp
)

Para obtener datos registrados previamente en la sesión utilizaremos el método **userdata** de la clase **Session**. Por ejemplo para obtener el identificador de sesión (atributo **session_id**) lo haríamos de esta forma:

$sess_id = $this->session->userdata ( 'session_id' );

El método **userdata()** devolverá **FALSE** si el item que queremos obtener no existe en la sesión. Un ejemplo para comprobar si existe el array carro en la sesión:

...
if ( $this->session->userdata ( 'carro' ) )
{
   //obtenemos el carro de la sesión
   $carro_session = $this->session->userdata ('carro') ;

   //obtenemos el numero de items del carro
   $items = $this->session->userdata('items');

   //obtenemos el precio total ('total_precio')
   $total_precio = $this->session->userdata('total_precio');
}
...

Para guardar valores en sesión utilizaremos el método **set_userdata('variable', 'valor')** de la clase **Session**. Un ejemplo de uso:

$this->session->set_userdata ( 'items' , 0 );

Veamos un ejemplo del método **add($id)** del modelo Cesta_model encargada de añadir un libro al carro guardado en la sesión:

...
public function add($id) {

   $carro_session = array();

   if (!$this->session->userdata('carro'))
   {
       $this->session->set_userdata('items', 0);

       $this->session->set_userdata('total_precio','0.00');
   }
   else
       $carro_session = $this->session->userdata('carro');

   //actualizamos el número de items de ese libro
   if (isset($carro_session[$id]))
       $carro_session[$id]++;
   else
       $carro_session[$id] = 1;

   //lo guardamos en la sesión
   $this->session->set_userdata('carro', $carro_session);
}

Para poder modificar un índice del array carro, obtenemos dicho array de la sesión ($carro_session) y comprobamos que existe dicho índice.

Si existe (isset($carro_session[$id]) incrementamos en uno la cantidad y sino lo inicializamos a 1.

results matching ""

    No results matching ""