Les sessions consisteix en una forma de de preservar certa informació a través d'accessos subsegüents. Això habilita la construcció d'aplicacions més personalitzada i incrementa l'atractiu d'un lloc web.
Session Class permet mantenir l'estat d'un usuari i el seguiment de la seva activitat, mentre que navegar pel lloc. Session Class emmagatzema per a cada usuari una sèrie de dades dins d'una galeta (cookie). També pot emmagatzemar les dades de sessió en una taula de base de dades per a una major seguretat, cosa que permet que l'identificador de sessió en la cookie de l'usuari es compari amb l'identificador de sessió emmagatzemat.
Les sessions s'executaran normalment de forma global amb cada càrrega de pàgina, de manera que la Session Class ha de inicialitzar en els constructors dels seus controladors o ser carregada automàticament pel sistema.
Per a la major part, la Session Class s'executarà desatesa en segon pla, de manera que simplement inicialitzar la classe provocarà llegir, crear i actualitzar sessions.
Per a inicialitzar la Session Class de forma manual en el constructor utilitzarem la funció
$this->load->library('session')
Quan es carrega una pàgina, la Classe Sessió verificarà si existeixen dades de sessió valides en la cookie de sessió del usuari. Si no existeixen dades de sessió (o van expirar) es crearà una nova sessió i es guardarà a la cookie. Si existeix la sessió, la seva informació s'actualitzarà y la cookie també o farà. Amb cada actualització, se regenerarà el session_id.
Una sessió, per al que a CodeIgniter es refereix, és simplement un array que conté la següent informació:
Les dades anteriors es guarden en una cookie com un array serialitzat com el següent:
[array] ( 'session_id' => codi aleatori, 'ip_address' => 'cadena - direcció IP de l'usuari', 'user_agent' => 'cadena - dades de l'agent d'usuari', 'last_activity' => marca de temps )
Qualsevol peça d'informació des de un array de sessió està disponible utilitzant la següent funció:
$this->session->userdata('item');
On item és l'index del array corresponen al item que volem recuperar. Per exemple, per a recuperar el ID de sessió, fariem:
$session_id = $this->session->userdata('session_id');
Per a borrar la sessió actual
$this->session->sess_destroy();
Esta funció hauria de ser la última a cridar-se. Si només el vol destruir alguns items, però no tots, utilitzarem unset_userdata();
Trobarem la informació relacionada amb les sessions dins de application/config/config.php.
Preferència | Per defecte | Opcions | Descripció |
---|---|---|---|
sess_cookie_name | ci_session | Ninguna | Nom amb que es vol guardar la sessió |
sess_expiration | 7200 | Ninguna | La quantitat de segons que vol que duri la sessió, el valor per defecte són 2 hores 7200 segons. Si no és vol que la sessió expiri és donarà valor 0 |
sess_expire_on_close | Fals | Cert o Fals (Booleà) | Si és vol que la sessió expiri o no quan es tanqui el navegador |
sess_encrypt_cookie | Fals | Cert o Fals (Booleà) | Encriptar o no les dades de la cookie |
sess_use_database | Fals | Cert o Fals (Booleà) | Si guardar les dades de sessió en una base de dades, ha de estar creada la base de dades abans d'activar aquesta opció. |
sess_table_name | ci_sessions | Qualsevol nom de vàlid de taula SQL | Nom de la taula de base de dades per a la sessió. |
sess_time_to_update | 300 | Temps en segons | Esta opció quan freqüent la Session Class es regenera a si mateixa i crearà un nou ID de sessió |
sess_match_ip | Fals | Cert o fals | Si ha de coincidir la direcció IP del usuari al llegir les dades de sessió. Alguns ISP modifiquen la IP dinàmicament, per el qual per a que una sessió no expiri es recomanable posar el valor a Fals. |
sess_match_useragent | Verdader | Cert o Fals (Booleà) | Si ha de coincidir el Agent Usuari al llegir les dades de sessió. |