|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 12 ![]() |
Bonjour,
Je souhaiterais déconnecter un utilisateur après une période d'inactivité, disons 30 minutes par exemple, et ce, en supprimant sa session. J'ai regardé plusieurs fois la doc php, lu les topics de ce forum et aucune réponse claire ne me vient ! Est-il donc impossible de détruire une session après n minutes d'inactivité de l'utilisateur ? J'ai essayé plusieurs changement, mais je ne suis arrivé à aucun résultat : - session.cookie_lifetime établit la durée de vie du cookie. Si on la fixe à 30 minutes, le cookie expire certes, mais pas après 30 minutes d'inactivité - session.gc_maxlifetime est a sa valeur par défaut (1440), mais aucune session n'est jamais détruite (session.gc_probability = 1, session.gc_divisor = 100) - session.cache_expire est à 180 Comme je ne trouve pas de réponse sur internet, je me dis que c'est surement pas possible, mais bon, je pose quand même la question ! Peut-on supprimer une session après n minutes d'inactivité de l'internaute ? |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() |
Salut!
Regarde si un de ces sujets ne répondrait pas à ta question : http://www.developpez.net/forums/sho...d.php?t=494577 http://www.developpez.net/forums/sho...d.php?t=413841 |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 12 ![]() |
Salut
Alors le premier post (que j'ai déjà lu), n'arrive à aucune conclusion sur la question. Pour le second, il le gère coté script, mais c'est l'utilisateur qui détruit lui même sa propre session en revenant sur la page. Ce que je voudrais faire, c'est détruire la session après 30 minutes d'inactivité, par exemple si l'utilisateur part déjeuner à 12h, je veux supprimer sa session vers 12h30, pas à 1h lorsqu'il revient de sa pause le midi, voire à 16h s'il ne se revient pas avant 16h. Je veux donc supprimer les sessions inactives, pas garder sa session et la supprimer pile quand il revient |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : mai 2007 Messages : 131 ![]() |
La conclusion du premier post c'est que si on veut être sûr qu'une session expire, il faut le gérer soi-même.
Il est possible que tu aies rencontré le même problème que moi : tu travailles (seul) sur ta machine de développement, et la session n'expire pas comme prévu. Sur un serveur de production ça ne devrait pas arriver, à moins que le site ait une audience proche de 0 : dès qu'un utilisateur accède à sa session, les autres sessions expirées sont détruites (enfin, ça dépend du rapport session.gc_probability/session.gc_divisor). Si on veut que la suppression des sessions expirées se fasse sans aucune connexion d'utilisateur, il faut planifier une tâche pour faire le nettoyage ... |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() |
Bonsoir,
Ce que tu souhaites n'est pas possible, du moins pas à ma connaissance. Les sessions étant stocké côté serveur, je vois mal celui-ci allez regarder à chaque seconde si une de ses sessions n'a pas expiré. Et puis je vois mal l'intérêt, quel est le problème de regarder lorsque l'utilisateur tente d'accéder au site l'heure de sa dernière action et comparer cette dernière à l'heure actuelle et de le virer si besoin ? |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 12 ![]() |
Il s'agit d'un serveur en prod avec 800 utilisateurs par jours, donc non, ca n'est pas le problème
@antony : sous les distributions debian, un cron se charge de purger les sessions. Il n'y va pas à chaque seconde heureusement ! Sur ma machine, il passe toutes les demi-heure. Sinon, pour répondre à ta question, j'ai pas mal d'utilisateurs qui dorment avec leur PC allumé, et qui se reconnecte le lendemain avec la session de la veille. Je ne souhaite pas garder ses sessions aussi longtemps. |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() |
Citation:
![]() Plusieurs solutions existent d'après moi : • Tu peux enregistrer la date de connexion dans une variable de session -> $_SESSION['date_log']. Ensuite, tu compares cette date avec la date courante pour obtenir la durée déjà écoulée... • Tu peux utiliser le même principe, mais avec une base de données pour stocker la date... • Une autre solution consiste à récupérer le chemin des fichiers de sessions avec la fonction session_save_path() et scanner ce dossier à la recherche du fichier portant le nom du SID du client. Puis comparer la date de ce fichier avec la fonction filemtime... |
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : mai 2007 Messages : 131 ![]() |
Si les sessions sont purgées avec la cron, une session ne devrait pas exister le lendemain ...
Pour "améliorer", il suffit de faire tourner la cron plus souvent : 800/ jour, sur une base de 10h/jour, ça fait 80 utilisateurs connectés sur une heure. Bon, un utilisateur peut voir 10 pages avant de s'endormir, mais ça fait toujours que 80 sessions ... La tâche cron doit durer 5s max. Fais la tourner toutes les 5 mn. Au pire (si le front du gars heurte la touche entrée quand il s'endort et que la cron passe juste après) ça fera 35 mn ... Edit : Sub0 : Blast078 ne veut pas que la session soit purgée sur action de l'utilisateur, mais automatiquement ... |
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() |
Sinon, tu peux utiliser un meta refresh ou Javascript pour actualiser la date de connexion...
|
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : mai 2007 Messages : 131 ![]() |
Je viens de relire le 1er post : si c'est une tâche cron qui purge les sessions, quel rapport avec les session.cookie_lifetime, session.gc_probability ou session.gc_divisor ? c'est une tâche prédéfinie crée à l'install de php (je ne connais pas linux) ou un script perso ? si c'est un script perso il devrait supprimer tous les fichiers de session plus vieux que session.gc_maxlifetime, sans tenir compte du reste ...
|
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Bonsoir,
je me range à l'avis de Sub0 et je coderais un petit script PHP à mettre en tâche planifiée (crontab sous unix), toutes les 30 minutes. Pour mettre un petit exemple schématique à la méthode de Sub0 : Code :
DaRiaN. |
||
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() |
Perso, je lance ce genre de nettoyage (ramasse miette) à chaque fois qu'un utilisateur se connecte. Cela m'évite de devoir utiliser une planification de type cron.
ps: Pour la suppression du fichier, penser éventuellement à redéfinir les droits avant d'utiliser unlink : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com