Fermeture de session via navigateur : récupérer l'heure et la date

Fredbeginner Messages postés 10 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 8 avril 2008 - 29 mars 2008 à 14:58
Fredbeginner Messages postés 10 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 8 avril 2008 - 29 mars 2008 à 15:58
Bonjour à tous,
Je développe un site PHP/MYSQL avec une table Logconnection qui récupère l'identifiant du memebre connecté, son IP et sa date / heure de connection. Quand il clique sur le bouton Logout : la table Logconnection récupère via une fonction date() la date et l'heure de déconnection. Celà me permet au lancement du site de voir combien de temps les membres restent connectés et de voir l'intérêt ou pas qu'il ont.
Le problème est que quand un membre ferme son onglet IE ou son navigateur, comment récupérer la date et l'heure de déconnection pour l'insérer dans ma table ??? (la sessions restant active un certain temps).

Merci de votre aide
Fred_Beginner

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 mars 2008 à 15:22
Salut,

Cette question est récurrente, et la réponse ne change pas avec le temps.

Il est impossible de savoir avec certitude quand un visiteur quitte un site. La raison est simple : les applications web ne sont pas des applications client/serveur, la communication se fait dans un seul sens.
Le client demande un document au serveur, qui lui envoie. L'échange s'arrête là.

Qu'un visiteur quitte une page ou bien la laisse ouverte pendant 3 jours, le résultat sera le même pour le serveur, puisqu'il n'aura reçu aucune nouvelle requête.
C'est donc à toi de déterminer à partir de combien de temps sans réponse de la part d'un client, le serveur considère que celui-ci est déconnecté (à moins qu'il ne clique volontairement sur un lien de déconnexion).

Ca, c'est la méthode "oldschool".

Maintenant, tu peux utiliser Javascript pour contrôler un peu mieux. Mais attention : ce n'est pas fiable à 100%. Si un utilisateur désactive Javascript ou utilise un navigateur ne supportant pas javascript (lynx par exemple, ou peut-être un téléphone portable, je ne sais pas s'ils gèrent bien le JS) tu ne pourras pas t'appuyer sur cette technique.

Tu as en gros deux solutions :
- un javascript qui s'exécute lors de la fermeture de la fenêtre et qui appelle un script PHP de déconnexion. Cette méthode a une limite : si le visiteur a 2 pages ouvertes et qu'il en ferme une, ça le compte déconnecté alors que ce n'est pas le cas (et compter en JS combien de fenêtres sur le même site sont ouverte relève de l'irrationnel)
- un javascript qui utilise un objet XmlHTTPRequest qui va, à intervalles réguliers, "pinger" un script, lequel met à jour ta base de données pour garder l'utilisateur "connecté". Cette méthode revient au même que de ne rien faire, sauf qu'elle permet de faire durer une session PHP, et tu peux considérer un temps plus court sans réponse.

J'espère que j'ai été clair... Sinon, ben demande des précisions.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
Fredbeginner Messages postés 10 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 8 avril 2008
29 mars 2008 à 15:58
Merci pour la rapidité de la réponse.
Quand à la solution je pense que tu a raison : il 'ny a rien d'idéal, inutile de charger en code les pages ou en ressources le serveur : si le membre utilise le logout tant mieux, sinon... tant pis je considère au moins la date de sa dernière visite.

Merci encore

Fred_Beginner
0
Rejoignez-nous