problème avec les sessions (expiration)

  • Auteur de la discussion Auteur de la discussion vin-moi
  • Date de début Date de début
WRInaute occasionnel
Bonjour,

voilà mon problème : j'utilise des sessions. l'id de session est transmis par cookies (mode par défaut) , cookies qui expire à la fermeture du navigateur.

j'ai regardé un peu dans les infos PHP, et le session.gc_maxlifetime est à sa valeur par défaut, c'est à dire 1440 S ( 24 minutes).

donc, sur la page de connexion, j'enregistre en variable de session le pseudo du membre .

Après, sur chaque page, j'initialise la session :

Code:
session_cache_limiter('private, must-revalidate');
session_start();

Ensuite, je vérifie que la variable pseudo est bien définie :
if(!empty($_SESSION['pseudo'])) .

Si elle n'est pas définie, je conclue que c'est un simple visiteur et je detruit la session créée :

else
{
session_unset();
session_destroy();
}

Le soucis est :

je me connecte, et j'ai beau attendre 1 heure, 2 heure, je suis toujours connecté au site tant que j'ai pas fermé le navigateur ... auriez vous une idée ? merci d'avance !
 
WRInaute discret
Petit rappel sur le fonctionnement du garbage-collector des sessions en PHP :

A chaque lancement de session (session_start()), PHP tire un nombre au hasard entre 0 et 99, et si ce nombre est inférieur au paramètre session.gc_probability alors le garbage-collector élimine les fichiers de session trop vieux : on entend par "trop vieux", les sessions dont l'inactivité en seconde est supérieure à session.gc_maxlifetime.

Ce qui veux dire, dans ton cas, que le paramètre à prendre en compte est aussi session.gc_probability. Lors de tes tests, y'a-t-il d'autres utilisateurs qui utilisent ton site ? Si ce n'est pas le cas, le problème vient de la : dans la mesure où si aucun utilisateur ne déclenche le session_start(), le garbage-collector n'est jamais démarré, et par conséquent, ta session est toujours valide, même un siècle après.

Voila, j'espère que c'est ça et bon courage !
 
WRInaute accro
Je ne sais pas si c'est ça mais pour ma part, j'ai apprécié l'explication :wink:
merci pedouille !
 
WRInaute occasionnel
merci beaucoup pour l'explication :) effectivement je suis seul à faire mes tests :)

le session.gc_probability est à 1 chez moi :p

par contre, j'ai pas bien saisis l'utilité de choisir un nombre au hasard ?

[edit] bon alors j'ai fait un test :

je me suis connecté, j'ai attendu plus de 24 minutes sans changer de page (inactif donc ...). Après, j'ai fait connecté quelqu'un, et au niveau de mon fichier de session, il ne s'est pas supprimé, mais sa date de modification est passé à la meme date que la connexion de l'autre personne ... vous avez une idée ?
 
WRInaute discret
Ca dépend de ce que tu apelles "autre personne" ?

Une autre adresse IP / Port, ou un autre compte propre à ton site web (genre un compte phpBB) avec la même IP ?. Dans le deuxième cas, pour PHP, il s'agit du même ordinateur, et donc de la même session. Ce qui explique qu'il ait simplement rafraîchi la session existante.

Pour le coup de tirer un nombre au hasard, ca sert à régler la fréquence de garbage-collection en fonction du nombre d'utilisateur, mais il faut faire un peu de math (probabilités pour etre exact) pour expliciter convenablement ce fonctionnement.
 
WRInaute occasionnel
non c'etait bien une autre personne avec une autre IP et un autre compte :p

Quand on reste sur une page sans en changer, on est sencé etre actif ou inactif ?
 
WRInaute discret
Est-ce que tu pourrais nous coller un exemple de code où tu gère les sessions. Histoire de voir si ça ne vien pas de là. Autre détail : tu utilise PHP 4 ou PHP 5 ?
 
Discussions similaires
Haut