Les personnes connectés sur mon site

a marqué ce sujet comme résolu.

Salut les amis je suis nouveau sur le forum et j’en profite pour posté mon premier message.

J’ai un site web et je veux mettre en place un système de tchat mon premier truc que je veux faire c’est de savoir les utilisateurs qui sont connectées et pour cela je veux utiliser les sessions pour le faire

Lorsque l’utilisateur ce connecte j’enregistre dans ma base de données dans l’attribut connecter 1 pour dire qu’il est connecter. Puisque les sessions en php se détruise a partir d’un certain temps d’inactiviter j’aimerais faire une mise ajout automatique si php détruit les sessions en mettant l’attribut connecter a 0.

Comment je peux savoir que php a supprimer ces sessions? Merci et je suis heureux de rejoindre votre communauté le zeste et je vais clem. :D

+0 -0

Il n’y a malheureusement pas de moyen de “surveiller” l’état d’une session PHP à ma connaissance, ni d’exécuter un code quand elle expire. Par contre, ce qu’il est possible de faire pour répondre au même problème, c’est de mettre à jour dans ta base de données une entrée last_activity (peu importe le nom), de type DATETIME (ou équivalent selon ton SGBD, enfin une date et heure quoi), et d’y mettre la date courante à chaque requête.

Pour connaître les gens connectés, il suffira de lister toutes les personnes dont le champ last_activity contient une date assez récente (par exemple moins de vingt minutes — après, à toi de voir après quel délai d’inactivité tu considères que la personne est partie), par exemple avec une requête SQL de ce genre :

-- Valide pour MySQL / MariaDB ; peut varier sur d'autres SGBD
SELECT * FROM users WHERE last_activity > SUBTIME(NOW(), "00:20:00")

Si ton système s’exécute en temps réel sans jamais recharger la page (ce qui serait cohérent pour un système de chat), l’inconvénient de cette technique c’est que sans actualisation de la page, la date ne sera jamais mise à jour. Pour contrer ce problème, une solution courante c’est d’envoyer une requête AJAX régulièrement (par exemple, toutes les minutes) pour vérifier que l’utilisateur est toujours là. S’il ferme la page, les requêtes arrêteront d’être envoyées, et on saura qu’il est parti.

Avec un tel système, il est même possible d’être plus fin : quelques minutes après le dernier signe de vie, on peut déjà supposer l’utilisateur déconnecté, vu que sinon la date de dernière activité est mise à jour en permanence.

C’est la même idée (même si implémentée différemment et en français) que le lien de mon voisin du dessus :) .

+1 -0

Certes, mais je pense que c’est vraiment négligeable. On parle d’un ping, rien de plus qu’une info « hé, je suis là ! ». C’est tout petit, en fait la requête pourrait même être vide (et alors elle ne pèse que les en-têtes HTTP).

Par exemple, WordPress utilise un tel système pour maintenir la connexion active dans l’administration. Et chaque requête pèse 47 octets (oui, octets) gzippé. Sachant qu’en plus, là, il y en a, des données.

Octets.
Octets.

En fait, les applications tournant en arrière plan consomment probablement plus de réseau que ça ^^ .

+1 -0

Pour contrer ce problème, une solution courante c’est d’envoyer une requête AJAX régulièrement (par exemple, toutes les minutes) pour vérifier que l’utilisateur est toujours là. S’il ferme la page, les requêtes arrêteront d’être envoyées, et on saura qu’il est parti.

Tu peux m’expliquer encore plus. Merci

+0 -0

la date de dernière activité est mise à jour en permanence

Cette façon de faire je la comprends c’est a dire a chaque fois que l’utilisateur click sur un lien de page je mets ajout ma table connexion en changeant la date.

Et pour voir les utilisateurs qui sont connectées je fais une requête qui se lance chaque minute pour voir les utilisateurs qui sont connectées.

Mais détail moi un peu la deuxieme option avec les pings on ne finis jamais d’apprendre. Merci

Pour contrer ce problème, une solution courante c’est d’envoyer une requête AJAX régulièrement (par exemple, toutes les minutes) pour vérifier que l’utilisateur est toujours là. S’il ferme la page, les requêtes arrêteront d’être envoyées, et on saura qu’il est parti.

Tu peux m’expliquer encore plus. Merci

soifConnaissance

Tu disais donc :

À chaque fois que l’utilisateur click sur un lien de page je mets à jour ma table connexion en changeant la date.

Et ça ça marche bien pour un site classique — d’ailleurs, Zeste de Savoir utilise exactement ce principe, ou presque. Cependant, on est ici dans un cas un peu différent d’une application que l’utilisateur ne recharge jamais : les messages sont transmis en AJAX (ou websockets) instantanément. Il faut donc pouvoir savoir s’il est toujours là autrement. Sinon, supposant que tu considères quelqu’un déconnecté après quinze minutes sans recharger une page, toute personne restant plus de quinze minutes sera vue comme déconnectée.

Pour éviter ça, une solution est de régulièrement, en javascript, côté client, envoyer une requête AJAX au serveur pour dire « hé, je suis toujours là ». Si l’utilisateur se déconnecte, les requêtes vont naturellement cesser, et alors on saura, après un certain délai, que la personne est partie.

Au passage, vu qu’on peut détecter si un onglet est au premier plan ou non, il serait même possible de gérer automatiquement un indicateur de présence, ou toute autre fonctionnalité dépendante d’informations disponibles côté client qui pourraient être transmises régulièrement de cette façon.

[HS]Il y a les webIRC, tu peux l’utiliser directement en JS via les websockets (tu n’auras pas d’historique).

L’avantage : Tu peux ouvrir un salon gratuitement.[/HS]

A-312

C’est vrai que ce genre de solutions, appuyées sur un protocole éprouvé (IRC) et interopérable, est pratique et efficace. Mais si l’objectif est d’apprendre, c’est bien mieux de tenter de le faire soi-même ;) .

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte