[PHP] Configurer correctement la durée de session php

Je m’adresse ici a ceux qui souhaitent contrôler la session de leurs utilisateurs plus précisément. En effet, si vous pensé qu’i suffit de configurer la durée de session avec session.gc_maxlifetime et bien non se n’est pas si simple.

Le concept

Reprenons depuis le début.  Les sessions sont utilisés pour conserver les données de vos utilisateurs pendant leurs navigations sur votre site.

Cette session est enregistré coté serveur et le client possède un cookie qu’il envoie a chaque requête pour pouvoir être identifier par le serveur.

La plupart du temps nous souhaitons que la session soit détruite lorsque l’utilisateur ferme son navigateur.

Comment ça marche

La variable session.gc_maxlifetime permet de définir la durée durant laquelle la session doit être conservé.  Attention ! Cela ne veut pas dire que la session serra supprimé immédiatement après ce délais. Cela impliquerait qu’un processus tourne en permanence pour supprimer toutes les sessions expiré, ça serait beaucoup trop lourd pour l’utilité qu’il y a derrière.

Les concepteurs ont été malin. Le ‘garbage collector’ (ramasse miette) à une probabilité de se lancé et va supprimer les sessions expiré lorsqu’une nouvelle session est créer. Comme je l’ai dit, il a une probabilité de se lancé, ce n’est pas systématique. En même temps, si c’était systématique, sur des sites a fort trafic (des milliers de sessions chaque seconde), il y aurait beaucoup de trop de ‘garbage collector’ de lancé et cela surchargerait inutilement le serveur.

Pour ajuster la probabilitées de lancer le ‘garbage collector’ a chaque création de session, il faut modifier deux variables en fonction de votre besoin. Dans le cas d’un site a fort trafic (comme ce blog … Oui ben ça va, on a le droit de rêver un peux ^^), une probabilité de 0.001  serra raisonnable, par contre pour un site qui a 100 visiteurs par jour, une probabilité de 0.5 est plus adapté.

 

La configuration

La configuration de la session se fait dans le fichier de configuration php.ini

session.gc_maxlifetime : définit la durée en seconde durant la session sera concervé. Par exemple, si vous voulez que la session soit concervé pendant 1h après la dernière navigation de l’utilisateur, mettez 3600.

session.gc_probability : numérateur de la division qui permet de calculer la probabilité de déclencher le garbage collector

session.gc_divisor : dénominateur de la division qui permet de calculer la probabilité de déclencher le garbage collector.

 

Par exemple pour avoir une probabilité de 0,001. session.gc_probability  =1 et session.gc_divisor  = 1000

Vous avez peut être déjà remarqué que sur votre environnement de développement, vous n’êtes jamais déconnecté. Regarder votre configuration, vous verrez certainement une proba très faible et puisque vous êtes seul à vous connecter, le garbage collector n’est jamais lancé  !

 

Si vous avez des questions, les commentaires sont là pour ça !

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *