2 votes

Comment savoir si l'utilisateur ferme son navigateur ? Application de chat

J'ai un client de chat simple qui permet aux utilisateurs de se connecter avec un nom d'utilisateur et qui stocke les messages qu'ils écrivent dans une base de données sql. Toutes les 3 secondes, la base de données imprime simplement toutes les lignes. Il s'agit donc essentiellement d'un client de chat.

J'aimerais conserver une liste des personnes en ligne. Comment faire ? Comment puis-je savoir si quelqu'un a fermé son navigateur ?

Pour l'instant, j'extrais le nom d'utilisateur sous la forme suivante

$name = $_COOKIE["name"];

et si cette valeur est vide, je sais qu'ils sont partis. Mais une fois qu'ils sont partis, il est trop tard pour savoir quel était leur nom d'utilisateur et je ne peux donc pas savoir qui est parti exactement.

Des idées ? Je suis assez novice en php, javascript et html, donc gardez cela à l'esprit :)

5voto

Mike Points 1704

Il est difficile d'envoyer une dernière requête au serveur lorsque quelqu'un ferme la fenêtre, car les navigateurs n'attendent généralement pas la fin de l'exécution du JS lorsque l'utilisateur souhaite fermer la fenêtre (comme c'est le cas avec la fonction onbeforeunload ).

Chaque fois que je suis confronté à une situation de ce type, j'ai tendance à utiliser onbeforeunload pour envoyer une requête finale (qui se produit rapidement et se termine généralement avant la fermeture de la fenêtre du navigateur), mais elle met également en œuvre une fonction de temporisation. La fonction de temporisation fonctionnerait comme suit :

Chaque fois que l'utilisateur envoie quelque chose au serveur, ce dernier le reconnaît comme étant "toujours là". Dans le même temps, le client fixe un délai de, disons, 45 secondes. Si l'utilisateur ne tape rien pendant 45 secondes, le client envoie de lui-même un signal "toujours vivant" pour rester connecté.

Le serveur doit maintenant exécuter un removeInactive() toutes les 60 secondes (avec une marge de 15 secondes pour les connexions lentes, d'où les 45/60 secondes) qui supprime tous les utilisateurs qui n'ont pas envoyé de signal "toujours en vie" au cours des 60 dernières secondes.

Ce système a bien fonctionné pour moi jusqu'à présent, vous pouvez l'essayer vous-même.

3voto

fire Points 9036

En supposant que vous utilisiez AJAX pour récupérer les messages de chat toutes les X secondes, mettez à jour votre tableau des utilisateurs avec l'horodatage actuel de cet utilisateur. Ainsi, toute personne dont l'horodatage est supérieur à 10 secondes saura qu'elle a quitté la page.

1voto

ehmad11 Points 1341

Le site internet de l'entreprise est un outil de gestion de l'information et d'aide à la décision

L'appel ajax peut être fait de cette manière :

window.setInterval(function() {
    $.ajax({      
      url: _URL_ENGINE + "/updateLastSeen/?userid=" + userID,
      success: function(data) {

      }
    }); 
}, 2000); // 2000 means 2 seconds

Pour interroger la liste des joueurs en ligne, vous pouvez le faire de la manière suivante

select * from players WHERE lastSeen > DATE_SUB(NOW(), interval 40 SECOND) 

J'espère que cela vous aidera

0voto

basarat Points 22425

Utiliser le onbeforeunload événement.

0voto

Khainestar Points 64

Vous pourriez éventuellement l'attacher à l'événement onunload en javascript. Jetez un coup d'œil à http://help.dottoro.com/ljflhicd.php pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X