Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
mikaelkael a écrit:
Hello,
Le nettoyeur de session s'exécute 1 (probability) requête sur 1000 (divisor). Si tu as peu de requêtes (10 par heure par ex.), le nettoyeur s'exécute donc en moyenne toutes les 100 heures. Tant que le fichier de session n'a pas été effacé, pour moi il est actif même si sa date est dépassée.
La session.gc_maxlifetime est utilisée par le nettoyeur de session au moment où il s'exécute. Avec mes valeurs, il s'exécutera (probablement) à chaque requête puisque 1/1 = 1.
A+
Ok !
Donc, si je comprends bien, certaines sessions dans des périodes creuses, voir mieux si je teste en local, devraient être valides même au delà de 3600 secondes puisque dans mon php.ini je suis sur une probabilité de nettoyage de 1/1000...
Je vais regarder ça, mais j'avais testé ce genre de truc au départ de mon projet et il m'avait bien semblé que les sessions étaient bien invalides au bout de 3600 secondes.
Bon je teste ça en local et je reviens !
précision : j'ai mis à 1/1000000 et je laisse tourner la pendule
Dernière modification par Jean-Marc Rigade (27-10-2008 14:50:34)
Hors ligne
Hello,
Je crois qu'on s'est pas bien compris. Divisor doit être à 1 pour avoir 1/1 = 1 = 100% de chances de s'exécuter à chaque requête donc d'entraîner un effacement de tes sessions inactives. Si tu mets 1000000, tu as 0.00001% de chances d'être exécuter par un requête.
A+
Hors ligne
Hello,
De plus :
"Session Garbage Collection Observation:
It appears that session file garbage collection occurs AFTER the current session is loaded.
This means that:
even if session.gc_maxlifetime = 1 second,
if someone starts a session A and no one starts a session for an hour, that person can reconnect to session A and all of their previous session values will be available (That is, session A will not be cleaned up even though it is older than gc_maxlifetime)." (Source : http://php.net/manual/fr/ref.session.php)
Donc pour faire ton test, il faut qu'un autre client démarre une session sur ton serveur, puisque tu ne peux tuer ta propre session.
A+
Dernière modification par mikaelkael (27-10-2008 15:12:04)
Hors ligne
mikaelkael a écrit:
Hello,
Je crois qu'on s'est pas bien compris. Divisor doit être à 1 pour avoir 1/1 = 1 = 100% de chances de s'exécuter à chaque requête donc d'entraîner un effacement de tes sessions inactives. Si tu mets 1000000, tu as 0.00001% de chances d'être exécuter par un requête.
A+
Tout à fait.
En mettant 1/1000000 j'ai peu de chance qu'au bout d'une heure ma session soit supprimée...
Donc même après une heure et un peu plus d'inactivité elle devrait être toujours présente et active...
Pour simuler un autre client il suffit de lancer une autre instance de navigateur, pour preuve l'ID de session de la log.
Dernière modification par Jean-Marc Rigade (27-10-2008 15:51:26)
Hors ligne
Après 3960 secondes sans aucune activité avec : $authSession->setExpirationSeconds(3600)
la session n'est plus valide et je ne suis plus considéré comme connecté au site web...
Peut on dire qu'avec 1/1000000, il est peu probable que la session soit nettoyée après seulement 3960 secondes ?
Je trouve tout ça plutôt normal mais je suis peut être à coté de la plaque.
Dernière modification par Jean-Marc Rigade (27-10-2008 16:08:07)
Hors ligne
Ce sujet n'était pas inutile. En tout cas pour moi c'est bon, ce que je voulais fonctionne. Je rejetterai un coup d'œil à tête reposée avant de balancer sur le site en ligne.
Hors ligne
Il est à noter aussi que certaines installations automatiques de PHP ajoutent une tache cron qui sert de garbage collector.
Sous mon ubuntu server par exemple j'ai une tache qui se lance toute les 30 minutes :
[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm
Le script maxlifetime :
#!/bin/sh -e
max=1440
for ini in /etc/php5/*/php.ini; do
cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
[ -z "$cur" ] && cur=0
[ "$cur" -gt "$max" ] && max=$cur
done
echo $(($max/60))
exit 0
Je suis pas un pro en ligne de commande et autre taches cron mais ça ressemble fortement à du gc.
Hors ligne