Comment remettre les sessions natives dans CodeIgniter

Julien Vidal 21 novembre 2011 5
Comment remettre les sessions natives dans CodeIgniter

Avec CodeIgniter, la gestion des sessions est très simple. Il suffit de charger la librairie associée qui est ‘session’. Jusque là, je ne pense pas vous apprendre grand chose. Cependant, quand on commence à lire la documentation de CodeIgniter, elle nous dit que:

The Session class stores session information for each user as serialized (and optionally encrypted) data in a cookie

Pour ce qui n’aimerait pas trop l’anglais, CodeIgniter a son propre système de stockage des sessions et utilise les cookies. Cela veut dire que si vous stockez des informations importantes concernant votre utilisateur dans sa session, et bien elles seront sur son poste, ce qui n’est pas génial…

Heureusement, il est possible de restaurer les sessions par défaut, c’est à dire restaurer le bon vieux $_SESSION. Pour cela, nous allons utiliser la librairie ”Native Session”. Il en existe d’autres, cependant elle conserve la même signature de méthode que la librairie originale, ce qui permet un portage assez simple.

Récupérer et déployer la librairie

Première étape, télécharger la librairie : Lien direct vers l’archive

Dans l’archive, vous trouverez une succession de dossier représentant une partie de l’architecture du framework. Un seul fichier est présent, la librairie ! Il faudra la placer au même endroit que dans l’archive.

Configurer notre librairie

Si vous tentez d’utiliser votre nouvelle librairie tout fraîchement déployée, vous allez tomber sur le message d’erreur suivant :

An Error Was Encountered

In order to use the Session class you are required to set an encryption key in your config file.

Comme pour l’utilisation de la librairie fournie par CodeIgniter, il faut mettre une clé de cryptage. Pour cela, rendez vous dans votre dossier d’application, dossier “config > config.php” et modifier les lignes suivantes :

/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class or the Session class you
| MUST set an encryption key. See the user guide for info.
|
*/
$config['encryption_key'] = 'votre-cle-de-cryptage';

Avec ceci, votre librairie est prête à l’emploi ! Il ne vous reste plus qu’à la charger.
Soit en passant par l’autoload, rendez-vous dans votre dossier d’application “config > autoload.php”

/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('session');

Soit en chargeant directement votre librairie dans votre controller :

$this->load->library('session');

Conclusion

Avec “Native Session”, vous allez pouvoir restaurer le mécanisme initial des sessions php tout en gardant les avantages fournis par Codeigniter. Il existe d’autres librairies de manipulation des sessions, en voici une liste non exhaustive à cette adresse .

Bon codage à tous !

Geekos.fr vous recommande les articles suivants

5 Commentaires »

  1. Eric 21 novembre 2011 au 9 h 40 min - Reply

    Une petite question me vient : qu’elle est la justification de CodeIgniter pour traiter les sessions de cette curieuse manière ?

  2. Kinobi 21 novembre 2011 au 17 h 54 min - Reply

    Bonjour, je commence à utiliser en prod CodeIgniter et en fait il vaut mieux utiliser le stockage en BDD,
    le cookie alors sert juste d’identifiant, comme avec les sessions PHP classiques.

    http://codeigniter.com/user_guide/libraries/sessions.html

  3. Julien Vidal
    Julien Vidal 21 novembre 2011 au 20 h 05 min - Reply

    @Eric
    Comme Kinobi l’a si bien dit, avec CI tu peux utiliser ta BDD pour stocker tes sessions.
    Cela a ses avantages (Autologin,traçage,…) et
    ses inconvénients ( Passage par la BDD, requêtes supplémentaires , performances.. ).
    Mais avant d’en arriver là, cela te permet de stocker bien plus d’informations que dans un cookie, dont la taille est très limitée (4ko).
    Autre point important, dans le cas, où des données critiques sont en session, tu ne les laisses pas chez l’utilisateur.
    Après, utiliser le système initial de CI peut se suffire à lui même, cela dépend de l’utilisation que tu comptes en faire.

    Bon dev !

  4. Eric 22 novembre 2011 au 7 h 22 min - Reply

    @Julien

    Je me suis mal exprimé : ma question concernait la manière de mettre les données de session dans le cookie !

    A part ne pas avoir à charger un fichier à chaque page, je ne vois pas pourquoi CodeIgniter a modifié la manière standard de PHP de gérer les sessions.

Laissez un message »