problème avec les sessions (expiration)

vin-moi
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 22 Nov 2004

problème avec les sessions (expiration)

Message le Ven Avr 28, 2006 11:27

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: Tout sélectionner
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 !


e-kiwi
Modérateur
Modérateur
 
Messages: 15618
Inscription: 23 Déc 2003

Message le Ven Avr 28, 2006 11:49

tu ne relancerai pas la session tant que le cookie est enregistré?

vin-moi
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 22 Nov 2004

Message le Ven Avr 28, 2006 12:15

c'est à dire ?

pedouille
WRInaute discret
WRInaute discret
 
Messages: 85
Inscription: 24 Mai 2005

Message le Ven Avr 28, 2006 12:59

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 !


dd32
Modérateur
Modérateur
 
Messages: 3387
Inscription: 9 Sep 2005

Message le Ven Avr 28, 2006 13:02

Je ne sais pas si c'est ça mais pour ma part, j'ai apprécié l'explication :wink:
merci pedouille !

vin-moi
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 22 Nov 2004

Message le Ven Avr 28, 2006 13:41

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 ?

pedouille
WRInaute discret
WRInaute discret
 
Messages: 85
Inscription: 24 Mai 2005

Message le Sam Avr 29, 2006 6:04

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.

vin-moi
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 391
Inscription: 22 Nov 2004

Message le Sam Avr 29, 2006 14:22

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 ?

pedouille
WRInaute discret
WRInaute discret
 
Messages: 85
Inscription: 24 Mai 2005

Message le Sam Avr 29, 2006 19:31

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 ?


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité