PHP et les sessions : utilisation avancée (2) Liaison d'autres données à la session

Dans certains cas, on peut souhaiter sauvegarder des donnés liées à une session sans utiliser la variable $_SESSION : par exemple un fichier envoyé par l'utilisateur, des données temporaires dans une base de données, etc.

Surcharger le gestionnaire de sessions par défaut

Ces données ne seront pas supprimées par l'implémentation par défaut du ramasse-miettes. Nous allons donc devoir surcharger le gestionnaire de sessions par défaut, composé de six fonctions, qui se chargeront de :

 l'ouverture de la session,
 la fermeture,
 la lecture des données de session,
 l'écriture,
 la suppression de la session,
 le ramasse-miettes/garbage collector.

Une fois ces fonctions créés, il faudra les déclarer au moteur PHP avec session_set_save_handler().

Dans la suite de cet article, je vais surcharger le gestionnaire de sessions en reprenant le fonctionnement de celui de PHP par défaut. Il est d'ailleurs très largement issu de l'exemple donné dans la documentation officielle. Dans certains cas, il aurait été utile de sauvegarder les données dans la base de données.

J'ai choisi d'utiliser une classe statique (MySessionHandler) pour centraliser ces fonctions, mais ce n'est pas une obligation.

  1.     <?php
  2.     class MySessionHandler
  3.     {
  4.     protected $save_path = '';
  5.       
  6.     /**
  7.       * On interdit la construction, puisque ce n'est pas nécessaire.
  8.       */
  9.     private function __construct() {}
 10       
 11     // Nous placerons ici les méthodes développées à la suite
 12     }