[Résolu] Affichage de la déconnexion d'un utilisateur

Affichage de la déconnexion d'un utilisateur [Résolu] - PHP - Programmation

Marsh Posté le 18-04-2008 à 14:34:59    

Bonjour à tous,
 
Je suis à la recherche du moyen pour afficher les déconnexion d'utilisateur par fermeture de navigateur.
 
J'ai une page ou lorsque le user arrive, une session est créée, le session_id est sauvegardé dans une bd MySQL.
Lorsque le user clique sur déconnexion, l'enregistrement correspondant dans la bd est supprimé et sa session est détruite.
 
Mais comme tous le monde sait, les user trouve beaucoup plus pratique de fermer le navigateur directement.
Effectivement, lorsque le user ouvre à nouveau le navigateur et va sur la page, une nouvelle session lui est créée.
 
Mais le problème c'est que j'ai toujours l'existence d'une session dans ma table.  
 
Je voudrais savoir si il existe une méthode pour que je puisse supprimer l'enregistrement.
 
Autre question, j'ai beau configurer mon php.ini en mettant le session.gc_probability et session.gc_divisor à 100, les fichiers de session ne sont pas supprimés.
 
Merci d'avance
 
Cordialement,


Message édité par akalaan le 21-04-2008 à 18:20:19
Reply

Marsh Posté le 18-04-2008 à 14:34:59   

Reply

Marsh Posté le 18-04-2008 à 14:59:54    

Si tes sessions sont dans une table et donc stockés dans ta base de données, tu n'as qu'a rajouter un champ date pour la validité de ta session.  
 
Tu rajoutes ensuite une requétes pour supprimer les sessions qui ne sont plus valide (a chaque nouvelle connexion par exemple), après tu as le choix d'être précis ou pas, c'est a dire de faire durée ta session 24H ou de faire un systéme avec un temps d'inactivité (5 minutes par exemple) qui met fin à la sessions (ca t'oblige a mettre a jour ta table a chaque chargement de page).

Reply

Marsh Posté le 21-04-2008 à 17:35:49    

Merci de m'avoir répondu,
 
Je vais effectivement faire comme tu as dit.
 
Je vais faire une requête supprimant les enregistrement supérieur à 5mn.
 
Or je voudrait comparer la date récupérer en php par $date = date("Y-m-d H:i:s", time()) - le champ date de ma table qui est au format datetime et si > à 5mn alors on supprime
 
Comment dois je m'y prendre .
 
Merci d'avance,

Reply

Marsh Posté le 21-04-2008 à 17:48:58    

Salut
 
Avec la fonction mktime, tu seras en mesure de générer deux dates pour les utiliser dans ta requête :
 
http://fr.php.net/manual/fr/function.mktime.php
 
Ceci dit, 5mn, c'est un peu court, surtout que d'après ce que j'ai compris, tu fais juste l'enregistrement, et pas d'update.

Reply

Marsh Posté le 21-04-2008 à 18:11:02    

Effectivement 5mn c'est court, mais la page ne nécessite pas plus de 20s pour regarder ce qu'il y a à voir.
 
Voici ce que j'ai fait finalement pour supprimer au bout de 5mn.

Code :
  1. <?php
  2. function convert_datetime($str) {
  3. list($date, $time) = explode(' ', $str);
  4. list($year, $month, $day) = explode('-', $date);
  5. list($hour, $minute, $second) = explode(':', $time);
  6. $timestamp = mktime($hour, $minute, $second, $month, $day, $year);
  7. return $timestamp;
  8. }
  9. $Date = date("Y-m-d H:i:s", time());
  10. $connect = mysql_connect(localhost,user,passwd) or die ("Connexion impossible au serveur : ".mysql_error());
  11. $select_db = mysql_select_db(intranet,$connect) or die ("Connexion impossible à la base : ".$intra_database." ".mysql_error());
  12. $intra_query = "SELECT * from CurConnexion";
  13. $res = mysql_query($intra_query) or die ("Requete impossible : ".mysql_error());
  14. $i=0;
  15. while ($row = mysql_fetch_array($res)){
  16.  //echo convert_datetime($Date)-convert_datetime($row['date'])."<br/>";
  17.  if ((convert_datetime($Date)-convert_datetime($row['date'])) > 300 ){
  18.   $dateConnect = $row['date'];
  19.   $sup = "DELETE from CurConnexion where date = '$dateConnect'";
  20.   mysql_query($sup) or die ("Requete impossible : ".mysql_error());
  21.   $i++;
  22.  }
  23. }
  24. echo "Il y a ".$i." enregistrement superieur a 5mn";
  25. ?>

Reply

Marsh Posté le 21-04-2008 à 18:37:10    

Tu aurais pu faire plus simple en stockant la date de fin de session dans la table, il suffisait d'enregistrer lors de l'ouverture de la session, la date au format timestamp en y rajoutant le délai ex : time() + 300, ensuite une simple requéte du genre suffit :  

Code :
  1. $sup = mysql_query("DELETE FROM CurConnexion WHERE date < '" . time() . "'" );


Naturellement il ne faut pas oublier de mettre la session a jour a chaque chargement de page en rajoutant 300 au champs date sinon le visiteur sera déconnecté

Code :
  1. $upd = mysql_query("UPDATE CurConnexion SET date = date + 300 WHERE id = '" . $id . "'" );


Reply

Marsh Posté le 22-04-2008 à 10:37:17    

Effectivement cela aurait été peut être plus simple
Je vais voir ce que je vais faire, mais en tout cas, merci pour tes réponses et attend toi à me revoir.
 
Cordialement,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed