[RESOLU] Mode hors ligne après la fermeture d'un onglet

Petit nouveau ! | 4 Messages

14 janv. 2022, 18:53

Bonsoir,

Je suis en train de faire un projet de Tchat en direct (Comme snap ou Instagram) et je bloque sur 1 seul truc car je procède bien toutes les sessions dont je veux, j'ai créé 5 sessions et j'arrive à me connecter sans problème, envoyer des messages sans problème. Quand je déconnecte le compte connecter en utilisant le bouton Logout cela affiche bien que l'utilisateur est hors ligne, cependant quand l'utilisateur ferme directement l'onglet sans utiliser le bouton Logout et bien la session reste toujours en ligne !

Savez-vous comment régler ce problème svp ?
Y a-t-il une ligne de commande PHP à utiliser pour cela ?

Merci,
Ange

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 janv. 2022, 11:46

Alors le principe le plus couramment utilisé, c'est dans ta table utilisateurs, d'ajouter un champ qui stockera la date et l'heure de la dernière fois que cet utilisateur a été en ligne.
Et ensuite sur ta page tu fais faire à ton utilisateur une sorte de "ping" toutes les 30 secondes pour dire "je suis toujours en ligne !".
Techniquement, c'est juste un appel ajax toutes les 30 secondes à un script PHP qui va mettre à jour le champ date précédemment créé pour cet utilisateur.

Ensuite pour savoir si un utilisateur est en ligne ou pas et bien tu as juste à comparer la date+heure courante avec la date+heure derniere fois en ligne.
Si > 40 secondes (pour prendre une petite marge par rapport à ton ping de 30 secondes) alors tu considères que l'utilisateur est hors ligne.

J'ai choisis 30 secondes de façon arbitraire, ça dépend de ton nombre d'utilisateurs connectés simultanément et de ce que ton serveur est capable d'encaisser car ça peut être assez gourmand en ressources, donc je déconseillerai de descendre sous les 30 secondes.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

17 janv. 2022, 19:00

Hello, Merci de ta réponse

Pour faire cour je suis nouveau en PHP et au niveau du code je n'y connais presque rien j'ai fais une grande partie donc comme j'ai dit tout est bien fonctionnelle sauf le "Ping" et je n'arrive pas à trouver des bout de code sur Internet ou autres tu pourrais m'aider . As tu discord ou autres pour les partage d'images ?

Merci,
Ange.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 janv. 2022, 20:03

Le ping se fait en javascript : window.setTimeout() pour l'exécuter toutes les X secondes.
Et ensuite un appel Ajax vers un script PHP.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

17 janv. 2022, 20:59

J'arrive pas 😭😭😭😭