PHP et les sessions : durée de vie, utilisation avancée et quelques subtilités (1) Assurer la durée de vie de la session client

Si vous choisissez de modifier la durée de vie de la session du côté du client (avec session_set_cookie_params()), il faudra appliquer les mêmes règles au ramasse-miettes. Cette opération ne peut être effectuée qu'en modifiant la directive session.gc_maxlifetime de php.ini.

Il est tout à fait possible de faire cette modification avec la fonction ini_set(), mais il faudra prendre certaines précautions. En effet : l'appel à ini_set() modifie dynamiquement la configuration, ainsi, lors d'une autre exécution, PHP considérera la valeur écrite statiquement dans les fichiers de configuration.

"S'affranchir de la configuration statique de PHP pour gérer la durée de vie d'une session"

Au passage, ce raisonnement est également valable lorsque la valeur de la directive est modifiée dans un fichier htaccess. Afin de garantir la durée de vie souhaitée à nos données de sessions, la méthode la plus simple consiste à les rendre inconnues pour un autre script ; autrement dit, s'affranchir plus profondément de la configuration statique de PHP.

 

Choisir un autre répertoire de stockage des données de session

 

La solution la plus simple consiste à choisir un autre répertoire de stockage des données de session, un sous-répertoire par exemple :

   1.     <?php
  2.     $ttl = 3600; // Une heure, en secondes
  3.     $local_sessions_save_path = ini_get('session.save_path').'/monsiteweb';
  4.      
  5.     session_set_cookie_params($ttl);
  6.     ini_set('session.gc_maxlifetime', $ttl);
  7.     ini_set('session.save_path', $local_sessions_save_path);
  8.      
  9.     session_start();

 

Avec cette solution, le garbage collector appelé dans le contexte d'un autre script supprimera les sessions périmées dans le répertoire défini par session.save_path, et non le sous répertoire que nous avons choisi. Pensez quand même à créer ce sous-répertoire !

Autour du même sujet