[PHP] detection deconnection d'un client

Résolu/Fermé
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 - 17 févr. 2006 à 11:50
 Vidda - 8 oct. 2011 à 10:43
Bonjour
Je suis en guerre avec un programme. Je dois réaliser une fonction qui génère un log lors de la deconnexion d'un client. Si l'opération est simple lorsque le client se déconnecte "normalement" (en cliquant sur le bouton déconnection) les choses se compliquent lorsque l'utilisateur erme son navigateur brutalement.
J'ai fais quelques tests et je me suis apperçu que apache associait les variables globales à un id de socket (socket de connection du client au serveur semble t-il...) et lorsque l'on coupe le navigateur, les variables semblent être détruite. Je ne sais pas si c'est une fonction C qui n'a pas d'équivalent php (ce que je redoute) ou si c'est une action déclenché par le serveur et qu'il est possible de récuperer (recuperation de l'evenment lancant l'action).
J'aimerais savoir si quelqu'un sait comment intercepter l'evenement de destruction de la socket via un script php ou si quelqu'un a une idée pour réaliser l'opération différemment.
Remarque : je ne dois pas utiliser de cookies (pour simplifier les choses :o) )
Je vous remercie par avance pour vos réponses !!

Cordialement

Ollie314

3 réponses

sebsauvage Messages postés 32844 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 647
17 févr. 2006 à 13:30
euh... HTTP est un protocole en mode déconnecté.
Il n'y a pas de notion de "déconnexion".

(Tout au plus une fermeture du socket TCP, mais ça ne veut absoluement rien dire, tout dépend si le client fait du pipelining ou non.)

Seule les cookies permettent de faire le lien entre 2 requêtes HTTP du même utilisateur.

La solution consiste à considérer que l'utilisateur est déconnecté si on a pas reçu de requête HTTP contenant son cookie de session pendant n minutes.
(Ce n étant à déterminer par toi)
2
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 201
17 févr. 2006 à 13:09
Salut,
bin moi à la rigueur ce que je verrai bien c'est que sur les pages sur lesquels ton client va, il faut qu'il y ai le descripteur d'événement onUnload dans body
-->
<body onUnLoad="javascript:monaction()">

avec monaction() qui est une fonction javascript qui réalise le traitement voulu à la fermeture de la page..

C'est tout ce que moi je peux te conseiller.
Bon Courage
1
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
17 févr. 2006 à 15:46
Bonjour,

Merci pour les conseils.

¨La solution consistant à faire un body OnUnload est assez efficace. On appel le script php sur le serveur et le log est crée. Je ne sais pas si il peut y avoir des restrictions mais dans mon cas ça marche. C'est redoutable !!

Merci

Cordialement

ollie314
1
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 201
17 févr. 2006 à 16:03
Pas de soucis.. :D
et que ca skate :P
0
ouai mais si il ferme son navigateur vraiment brutalement (kill process ou arreter le processus)
ou alors si il utilise opéra par exemple onunload marche pas
0
Attention si dans ton js exécuté sur le onUnload tu met une requête ajax met la en synchrone car en asynchrone elle n'aura pas forcement le temps de se faire. Sinon tu as aussi l'évènement onbeforeunload qui est un peu différent(confirmation et possibilité d'annuler la fermeture).
0
Bonjour,

Efficace mon oeil! Quand la machine redémarre de façon intempestive, il n'y a aucun moyen que le navigateur exécute du javascript, AJAX synchrone ou non, puisque le navigateur AUSSI se retrouve fermé. Que ce soit sur une commande exit ou une coupure de courant voire une panne machine.
Sebsauvage nous met sur la bonne voie mais la réponse reste incomplète, malheureusement. Mais à suivre...
0