Comment travailler avec des données de session dans CodeIgniter

En tant que développeur CodeIgniter, il est très important que vous compreniez comment utiliser la bibliothèque de sessions principale. Bien sûr, vous pouvez toujours utiliser la valeur par défaut $ _SESSION la syntaxe, mais il est toujours recommandé d'utiliser le wrapper à la place.

Commençons par le chargement d'une bibliothèque de session, puis passons à la discussion sur la façon d'ajouter, de récupérer, de supprimer et de détruire des variables de session. Dans le dernier segment, nous examinerons les différents pilotes de session intégrés à votre disposition fournis par le cadre CodeIgniter lui-même..

Comment charger une bibliothèque de session

Si vous souhaitez utiliser des sessions dans CodeIgniter, la première chose dont vous aurez besoin est une bibliothèque de sessions intégrée. Sauf si et jusqu'à ce que vous développiez une application Web ne nécessitant aucune session, vous ne devriez pas vous occuper de la bibliothèque de sessions. Bien que ce ne soit pas le cas la plupart du temps, vous pouvez charger automatiquement la bibliothèque de sessions dans CodeIgniter afin qu'elle active les fonctionnalités de traitement de session pour chaque requête Web..

Allez-y et ouvrez le fichier situé à application / config / autoload.php. Trouvez la section suivante.

/ * | -------------------------------------------------- ----------------- | Bibliothèques à chargement automatique | -------------------------------------------------- ----------------- | Ce sont les classes situées dans system / libraries / ou your | application / libraries /, avec l'ajout du répertoire | bibliothèque 'base de données', ce qui est un cas particulier. | | Prototype: | | $ autoload ['libraries'] = array ('base de données', 'email', 'session'); | | Vous pouvez également fournir un autre nom de bibliothèque à attribuer | dans le contrôleur: | | $ autoload ['libraries'] = array ('user_agent' => 'ua'); * / $ autoload ['libraries'] = array ();

le $ autoload ['libraries'] array contient la liste des bibliothèques à charger automatiquement. Selon nos besoins, changeons-le pour qu'il ressemble à ceci:

$ autoload ['libraries'] = array ('session');

En outre, il existe un autre moyen d’y parvenir. Vous pouvez utiliser le code suivant quelque part dans votre fichier de contrôleur pour charger la bibliothèque de session..

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

C'est à peu près tout ce qui concerne l'initialisation de la bibliothèque de session.

Dans les sections suivantes, nous allons passer en revue les différentes opérations que vous pouvez effectuer avec la bibliothèque de session principale. Pour le démontrer, nous allons construire un exemple de fichier de contrôleur qui charge la bibliothèque de session et fournit des méthodes qui seront décrites tout au long de cet article..

Allez-y et créez un fichier application / controllers / Example.php avec le contenu suivant.

chargement-> bibliothèque ('session'); // charge url helper $ this-> load-> helper ('url');  public function index () / **** SET SESSION DATA **** / // définition d'un seul élément dans la session $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com') ; // set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'intérêts' => array ('tennis', 'travelling')); $ this-> session-> set_userdata ($ arraydata); / **** GET SESSION DATA **** / // récupère les données de la session echo "Favorite Website:". $ this-> session-> userdata ('favourite_website'); écho "
"; echo" Nom de l'auteur: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Intérêt (exemple de tableau): ". $ this-> session-> userdata ('interest') [0]; echo"
"; // récupère tout ce qui est stocké dans la session en même temps
'; print_r ($ this-> session-> userdata ()); / **** REMOVE SESSION DATA **** / // clé non définie de la session $ this-> session-> unset_userdata ('favourite_website'); // désélectionne plusieurs éléments à la fois $ keys = array ('twitter_id', 'interest'); $ this-> session-> unset_userdata ($ clés); écho '
'; print_r ($ this-> session-> userdata ());  public function setflash () // définir les données flash $ this-> session-> set_flashdata ('flash_welcome', 'Hey, bienvenue sur le site!'); // marque les données existantes comme données flash $ this-> session-> set_userdata ('flash_message', 'Je suis un message flash!'); $ this-> session-> mark_as_flash ('flash_message'); redirect ('exemple / getflash');  fonction publique getflash () // récupère les données flash echo "Message d'accueil Flash:". $ this-> session-> flashdata ('flash_welcome'); écho '
'; print_r ($ this-> session-> flashdata ());  public function tempdata () // définir les données temporaires $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // marque les données existantes en tant que données temporaires $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // récupère les données temp echo $ this-> session-> tempdata ('coupon_code');  fonction publique destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // destory session $ this-> session-> sess_destroy (); 

C'est un fichier de contrôleur très basique avec lequel vous devriez être familiarisé en tant que développeur CodeIgniter. Nous sommes maintenant prêts à passer aux sections suivantes qui donnent un aperçu des concepts de gestion de session..

Comment ajouter, récupérer et supprimer des données de session

Pour commencer, récupérons le code de notre __construction méthode.

fonction publique __construct () parent :: __ construct (); // charge la bibliothèque de session $ this-> load-> library ('session'); // charge url helper $ this-> load-> helper ('url'); 

Juste au cas où vous n'avez pas autoloadé la bibliothèque de session, cela le fera en premier lieu. En dehors de cela, nous avons également chargé le url aide qui nous permet d'utiliser certaines méthodes utilitaires que nous verrons plus tard.

Ensuite, prenez le code de la indice méthode.

fonction publique index () / **** SET SESSION DATA **** / // élément unique dans la session $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'intérêts' => array ('tennis', 'travelling')); $ this-> session-> set_userdata ($ arraydata); / **** GET SESSION DATA **** / // récupère les données de la session echo "Favorite Website:". $ this-> session-> userdata ('favourite_website'); écho "
"; echo" Nom de l'auteur: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Intérêt (exemple de tableau): ". $ this-> session-> userdata ('interest') [0]; echo"
"; // récupère tout ce qui est stocké dans la session en même temps
'; print_r ($ this-> session-> userdata ()); / **** REMOVE SESSION DATA **** / // clé non définie de la session $ this-> session-> unset_userdata ('favourite_website'); // désélectionne plusieurs éléments à la fois $ keys = array ('twitter_id', 'interest'); $ this-> session-> unset_userdata ($ clés); écho '
'; print_r ($ this-> session-> userdata ()); 

Comme vous avez déjà chargé la bibliothèque de session, vous pouvez utiliser $ this-> session pour accéder à l'objet de session et accéder aux méthodes prises en charge. le set_userdata Cette méthode est utilisée pour créer une nouvelle variable de session et prend généralement deux arguments-clé et valeur..

$ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com');

Vous pouvez également utiliser le set_userdata méthode pour créer plusieurs variables en un seul appel. Dans ce cas, il vous suffit de fournir un argument, qui doit être un tableau, comme indiqué ci-dessous..

// set array of items in session $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'intérêts' => array ('tennis', 'travelling')); $ this-> session-> set_userdata ($ arraydata);

Les utilisateurs avec des yeux vifs auraient remarqué que vous pouvez également affecter un tableau en tant que valeur de toute variable de session, comme indiqué ci-dessus dans la section intérêts Exemple.

Voyons maintenant comment récupérer la valeur d’une variable de session. le données d'utilisateur La méthode est utilisée pour extraire la valeur d'une variable de session. Elle nécessite généralement la clé de la variable de session que vous recherchez comme premier argument..

echo "Site Web préféré:". $ this-> session-> userdata ('favourite_website');

Si vous recherchez l'une des entrées du tableau, vous pouvez utiliser les éléments suivants:

echo "Intérêt (exemple de tableau):". $ this-> session-> userdata ('interest') [0];

Plus souvent qu'autrement, vous voulez savoir combien de variables au total sont stockées dans une session active à des fins de débogage, et vous pouvez également le faire..

// tout est stocké dans la session en même temps echo '
'; print_r ($ this-> session-> userdata ());

Oui, le même données d'utilisateur méthode vient à notre secours! Si vous ne passez aucun argument à la données d'utilisateur méthode, il va retourner toutes les variables de session.

Enfin, voyons comment vous pouvez supprimer des variables de la session. C'est le unset_userdata méthode que vous pouvez utiliser si vous souhaitez supprimer des entrées de session.

// désactive la clé spécifique de la session $ this-> session-> unset_userdata ('favourite_website');

Et voici la variante de la même méthode qui montre comment supprimer plusieurs entrées en une seule fois..

// désélectionne plusieurs éléments à la fois $ keys = array ('twitter_id', 'interest'); $ this-> session-> unset_userdata ($ clés);

Et cela devrait supprimer le twitter_id et intérêts les entrées de la session.

Allez-y et testez le indice méthode pour voir les choses en action.

Goodies utiles: Flashdata et Tempdata

Dans la dernière section, nous avons abordé les bases de la gestion de session dans CodeIgniter. Dans cette section, nous allons discuter de quelques autres méthodes utilitaires fournies par la bibliothèque de session..

Dans votre développement quotidien, vous devez souvent afficher des messages en réponse à certaines actions de l'utilisateur. Par exemple, vous souhaitez afficher un message de réussite lorsqu'une personne publie un commentaire sur votre site. Le message ne doit s'afficher qu'une seule fois. le set_flashdata méthode est un candidat idéal pour ce genre de cas d'utilisation.

En réalité, set_flashdata est très similaire à la set_userdata Cette méthode vous permet de sauvegarder une valeur en session. La seule exception est que la valeur de session définie par le flashdata La méthode est disponible pour la prochaine demande uniquement. Dans les requêtes suivantes, vous ne pourrez plus accéder à ces variables car elles ont été effacées..

Prenez le code de la setflash méthode.

fonction publique setflash () // définir les données flash $ this-> session-> set_flashdata ('flash_welcome', 'Hey, bienvenue sur le site!'); // marque les données existantes comme données flash $ this-> session-> set_userdata ('flash_message', 'Je suis un message flash!'); $ this-> session-> mark_as_flash ('flash_message'); redirect ('exemple / getflash'); 

Vous pouvez créer un nouveau flashdata variable de la même manière que vous auriez créé une variable de session régulière en utilisant le set_userdata méthode. D'autre part, vous pouvez également marquer une variable de session existante en tant que flashdata variable. Dans ce cas, vous devez utiliser le mark_as_flash méthode, comme indiqué dans le code ci-dessus.

Enfin, nous redirigeons l'utilisateur vers le avoir le Flash méthode qui montre comment utiliser les variables flashdata définies dans le setflash méthode. Regardons rapidement le avoir le Flash méthode.

fonction publique getflash () // récupère les données flash echo "Message d'accueil Flash:". $ this-> session-> flashdata ('flash_welcome'); écho '
'; print_r ($ this-> session-> flashdata ()); 

Comme prévu, il y a un flashdata méthode qui vous permet de récupérer les variables de session stockées sous flashdata. Si vous appelez le flashdata méthode sans aucun argument, il va retourner toutes les variables flashdata similaires à celle de la données d'utilisateur méthode.

Allez-y et testez le setflash méthode. Vous serez redirigé vers l'URL getflash et le message s'affichera. Si vous actualisez la page getflash, vous ne verrez plus ce message.!

Ensuite, il existe une autre variante fournie par la bibliothèque de session dans cette catégorie: les variables de session tempdata. Si vous voulez créer des variables de session pour une période donnée, le set_tempdata la méthode est celle que vous recherchez.

Par exemple, si vous souhaitez créer une variable de session à supprimer automatiquement au bout d’un certain délai, vous pouvez utiliser set_tempdata méthode pour créer une telle variable, comme indiqué dans la méthode suivante.

fonction publique tempdata () // définir les données temporaires $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // marque les données existantes en tant que données temporaires $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // récupère les données temp echo $ this-> session-> tempdata ('coupon_code'); 

Le troisième argument de la set_tempdata méthode indique le nombre de secondes après lequel la variable sera supprimée de la session.

Vous pouvez également marquer une variable de session existante comme tempdata à l’aide de la touche mark_as_temp méthode à condition que vous ayez déjà créé une variable de session en utilisant le set_userdata méthode.

Enfin, vous pouvez utiliser le tempdata méthode pour récupérer la valeur de toute variable tempdata.

Il est donc agréable de disposer de telles méthodes utilitaires au cours de votre cycle de développement quotidien.!

Ce que vous ne devriez pas oublier: Session Destroy

Détruire la session est probablement la dernière chose que vous voudriez faire lorsque l'utilisateur se déconnecte. Il s'assure que les variables de session définies jusqu'à présent sont supprimées de la session active et ne sont plus disponibles pour les requêtes suivantes..

Tirons dans le code de la détruire méthode et passer à travers elle.

fonction publique destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // détruit la session $ this-> session-> sess_destroy (); 

C'est le sess_destroy méthode qui nous aide à détruire la session active. Bien sûr, cela supprimera également les variables tempdata et flashdata définies dans la session active..

Assurez-vous de prendre l'habitude de détruire une session lorsqu'elle n'est plus utile dans le contexte utilisateur actuel..

Cherry on the Top: Pilotes de session

Nous sommes dans la dernière section de cet article, les pilotes de session. Le plus souvent, vous ne vous occupez pas de la configuration du pilote de session dans votre application en tant que pilote de session par défaut, le système de fichiers, est déjà configuré avec la configuration par défaut..

C'est donc le système de fichiers qui contient toutes les données relatives à la session. Il est largement utilisé et constitue la norme acceptée pour la gestion de session. Cela dit, CodeIgniter prend également en charge d’autres pilotes de session que vous pouvez utiliser si vous souhaitez passer du pilote de session du système de fichiers par défaut..

Voici une liste de tous les pilotes de session pris en charge dans CodeIgniter:

  • Des dossiers
  • Base de données
  • Redis
  • Memcached

Comme son nom l’indique, le pilote de session de la base de données stocke les données de la session dans la base de données que vous avez configurée pour votre application CodeIgniter..

D'autre part, les deux autres pilotes de session sont des mécanismes de stockage en mémoire préférés pour les sites Web hautes performances..

dans le application / config / config.php fichier, vous pouvez configurer le pilote de session que vous souhaitez utiliser dans votre application.

$ config ['sess_driver'] = 'base de données'; $ config ['sess_save_path'] = 'custom_sessions';

Il indique à CodeIgniter d’utiliser le pilote de session de la base de données et les données de la session seront sauvegardées dans le répertoire. custom_sessions Table MySQL.

La discussion de chaque pilote de session dépasse le cadre de cet article, mais vous pouvez consulter la documentation officielle du site qui fournit un guide détaillé pour chaque pilote..

Conclusion

La gestion de session dans CodeIgniter était le sujet du tutoriel d'aujourd'hui, et nous en avons discuté de manière approfondie en examinant tous les aspects du sujet..

En commençant par les opérations de base sur les sessions, nous avons également passé en revue ces méthodes flashdata et tempdata, et c’est la discussion sur les pilotes de session qui a conclu notre article..

Comme toujours, vous pouvez crier vos questions et suggestions en utilisant le flux ci-dessous!