Page 1 sur 1
Savoir si un membre est connecté ou non
Posté : 30 avr. 2006, 15:40
par mixxx
Bonjour,
Je souhaiterais afficher un bouton offline et online a coté du profil de chaque membre... Comment faire ? Je voudrais en fait que selon qu'ils soient en ligne ou hors ligne (sur le site) les autres visiteurs puissent le savoir. Lorsqu'ils se connectent, une session est ouverte. J'ai vu sur un site que je pouvais ajouter un champ 'connecte' dans la table membre, égal à 0 si le membre est déconnecté, et égal à 1 s'il est connecté. Lors de la connexion du membre je peux faire un update table SET connect='1'; mais quand il part du site, comment faire en sorte que connecte soit égal à 0 ??? Je peux pas faire un update si il va sur un autre site, sans se déconnecter...
D'avance merci pour votre aide
Posté : 30 avr. 2006, 15:49
par Truc
Salut,
en effet tu peux ajouter un champ à la table des membres mais vaut mieux crée une nouvelle table "connecté" qui contiendrait l'id du membre et un timestamp qui correspond au moment de la connexion ou au changement de page.
Avec ce timestamp tu peux savoir si ce membre n'as pas rechargé de page sur ton site depuis plus de 5 minutes par exemple et donc le considérer comme déconnecté et donc mettre à jour la table "connecté" en supprimant l'id du membre.
Tu peux t'inspirer de
ce tutopour un compteur de visites.
Posté : 30 avr. 2006, 15:57
par mixxx
Pas bête, tu veux dire que lorsqu'un membre est connecté, à chaque chargement de page, on update le timestamp (ça risque pas d'être trop lourd ?), et si au bout de 5 min, il n'a pas changé, on le considère comme déconnecté.
Ben disons que j'ai déjà la date de dernière connexion de chaque membre dans la BD, donc je peux m'en servir pour ça... tout simplement. Parceque créer une nouvelle table, ça me ferait faire une requete supplémentaire, alors que j'ai déjà des infos à chercher dans la table membre. Reste plus qu'à voir pour chaque membre si le timestamp est plus vieux ou non que 5 min.
C'est jouable aussi comme ça ? C'est pas trop lourd ?
Merci pour votre aide
Posté : 30 avr. 2006, 16:05
par Truc
Trop lourd non, du moment que tu n'as pas 1 millions de connectées en même temps ça devrais aller
La mise à jour sur une nouvelle table ne prend que quelque microsecondes.
Tu peux te servir du champs dernière connexion que tu as déjà mais la requete de mise à jour se ferait sur une table bien plus grosse que celle des connectés puisque tous les membres y sont.
Il est préférable de construire une nouvelle table pour optimiser justement.
Posté : 30 avr. 2006, 16:14
par mixxx
Oui, mais par exemple, sur un forum, je recherche les infos relatives aux membres qui ont posté dans chaque topic. Là, pour afficher le statut, je n'aurais qu'à ajouter un champ dans la requete de chaque membre. Si je crée une nouvelle table, je serais obligé d'ajouter une requete par membre... Pareil dans la liste des membres... Donc je sais pas vraiment...
Fianelement, l'un dans l'autre ça ne revient pas au même ? La requete d'UPDATE sera : UPDATE table SET last_connexion='time()' WHERE Id='".$_SESSION['MemberId']."';
Posté : 30 avr. 2006, 16:32
par Truc
l'un dans l'autre c'est la même chose, toujours si la table des membres n'est pas énorme sinon la recherche du tuple à mettre a jour serait plus long que dans une nouvelle table.
En clair si tu as beaucoup de membre mieux vaut une nouvelle table sinon tu peux ajouter un champ dans la table déjà existante.
Posté : 30 avr. 2006, 16:58
par mixxx
J'ai même une idée pour alléger la chose. On peut mettre le timestamp enregistré dans la BD en variable de session lorsque le membre est connecté. Et lorsque en comparant la variable de session, et l'heure actuelle on constate un décalage de 5 minutes on met le timestamp à jour dans la BD et dans la variable. C'est mieux ??? Ca allégerait, non ?
Posté : 30 avr. 2006, 17:41
par Truc
Tu ne peux pas t'y prendre ainsi.
Comment va tu faire pour savoir qui est connecté lors de la mise à jour automatique des non connectés.
L'opération de base consiste à comparer les timestamp des membres de la base de donnée mais s'il n'est pas mis à jour régulièrement dans la base le timestamp de connexion sera dépassé et donc considérer non actif alors qu'il est toujours connecté et actif .