slam4:php:codeigniter:session

Ceci est une ancienne révision du document !


Sessions CodeIgniter

  1. Sessions CodeIgniter

Les sessions codeIgniter fonctionnent de la même façon que celles de PHP, excepté qu'elles ne nécessitent pas d'accéder à la configuration du serveur web pour être elles-mêmes configurées. CodeIgniter utilise son propre système de gestion des sessions, soit via les cookies, soit via la base de données.

La bibliothèque session doit être chargée :

  • soit automatiquement avec autoload.php :
$autoload['libraries'] = array('session');
  • Soit dans le code d'un contrôleur par exemple :
$this->load->library('session');
$session_id = $this->session->userdata('session_id');

CodeIgniter sauvegarde en session des informations complémentaires sur le visiteur :

<?php
$adresse_ip               = $this->session->userdata('ip_address');
$user_agent_du_navigateur = $this->session->userdata('user_agent');
$derniere_visite          = $this->session->userdata('last_activity');
?>

Pour une variable :

$this->set_userdata('nom','value');

Exemple :

<?php
$this->session->set_userdata('utilisateur', $user);
 
// ...............
 
$aUser= $this->session->userdata('utilisateur');
echo(aUser->getNom());
?>

Pour plusieurs variables :

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );
 
$this->session->set_userdata("user",$newdata);

Une variable :

$this->session->unset_userdata('nom');

Plusieurs variables :

$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
$this->session->sess_destroy();

CodeIgniter offre la possibilité d'utiliser des variables de session mémorisées uniquement d'une requête sur l'autre puis ensuite automatiquement détruites.

$this->session->set_flashdata('item', 'value');

Pour assurer la persistance des objet en session, il est parfois préférable de sur-définir la méthode _sleep de chacun d'entre eux, de façon à définir les membres à sérialiser :

/**
 * Utilisateur
 */
class Utilisateur
{
    ...
    public function __sleep(){
    	return array('id','login','password','nom','prenom','mail');
    }
}

La limite de taille de la session codeIgniter étant de 4ko, il peut être nécessaire pour dépasser cette limite d'utiliser la base de données pour les sessions.

  • slam4/php/codeigniter/session.1418782325.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)