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 !