J'ai passé un peu de temps à la recherche d'une bonne réponse à la façon dont les paramètres du serveur php.ini font sessions expirent. J'ai trouvé beaucoup d'informations, mais il a fallu un certain temps pour comprendre pourquoi les paramètres fonctionnent comme ils le font. Si vous êtes comme moi, cela peut vous être utile:
Les sessions sont stockées en tant que cookies (fichiers sur le PC du client) ou côté serveur en tant que fichiers sur le serveur. Les deux méthodes ont des avantages et des inconvénients.
Pour les sessions stockées sur le serveur, trois variables sont utilisées.
session.gc_probability session.gc_divisor session.gc_maxlifetime
(session.gc_probability/session.gc_divisor) produit la probabilité que la routine de collecte des ordures sera exécuté. Lorsque le garbage collector s'exécute, il vérifie les fichiers de session qui n'ont pas été consultés au moins pour session.gc_maxlifetime et les supprime.
Tout cela est expliqué assez bien dans les messages du forum (celui-ci en particulier!) - Mais les questions suivantes ne se présentent:
1.) Comment est que la probabilité appliquée? Quand le serveur lance-t-il les dés? R: Le serveur jette les dés chaque fois que session_start() est appelée pendant toute session active sur le serveur
Donc, cela signifie que vous devriez voir le éboueur courir à peu près une fois pour chaque tranche de 100 fois que session_start() est appelée si vous avez la valeur par défaut = 1 et session.gc_probability session.gc_divisor = 100
2.) Qu'est-ce qui se passe sur les serveurs à bas volume? A: Lorsque session_start() est appelée, FIRST actualise la session et vous donne accès aux valeurs de la session . Cela met à jour l'heure sur votre fichier de session sur le serveur . Il lance ensuite les dés et s'il gagne (1 chance sur 100), il appelle le garbage collector. Le garbage collector vérifie ensuite tous les fichiers d'identification de session et voit s'il y a des qui peuvent être supprimés. Donc, cela signifie que si vous êtes la seule personne sur le serveur, votre session ne deviendra jamais inactive et il semblera que la modification des paramètres n'a pas d'effet . Supposons que vous définissiez session.gc_maxlifetime à 10 et session.gc_probability à 100. Cela signifie qu'il y a 100% de chances que le garbage collector s'exécute et que efface tous les fichiers de session qui n'ont pas été accédés au cours des 10 dernières secondes .
Si vous êtes le seul sur le serveur, votre session ne sera pas supprimée. Vous avez besoin de au moins 1 autre session active en cours pour que la vôtre devienne inactive.
Donc, fondamentalement, sur un serveur à faible volume ou à un moment de faible volume - il pourrait être beaucoup plus longtemps que session.gc_maxlifetime avant le garbage collector fonctionne réellement et les sessions sont effectivement supprimées. Et sans savoir comment cela fonctionne, il peut apparaître complètement aléatoire pour vous.
3.) Pourquoi utilisent-ils la probabilité?
A: Performances. Sur un serveur de volume supérieur, vous ne voulez pas que le ramasse-miettes soit exécuté à chaque requête de session_start(). Il va ralentir le serveur inutilement. Donc, selon le volume de votre serveur, vous pouvez augmenter ou diminuer la probabilité que le garbage collector fonctionne. J'espère que cela lie les choses ensemble pour vous. Si vous êtes comme moi et que vous avez essayé la session .gc_maxlifetime et il ne semble pas fonctionner (parce que vous l'avez essayé sur un serveur de développement afin de ne pas déranger personne), alors cet article espère vous a sauvé un peu de grattage de la tête.
Bonne chance!
Comme je suis tombé moi-même sur cette question après quelques recherches, on peut avoir une réponse très complète sur ce problème sur [cette question stackoverflow] (http://stackoverflow.com/a/1270960/474526), en particulier pourquoi ni la mise à jour 'session.gc_maxlifetime' ni 'session.cookie_lifetime' ne sont des approches fiables. –