Savoir si un membre est connecté sur mon site ou non

a marqué ce sujet comme résolu.

Bonsoir chers amis je me dois de développer un petit site en HTML, CSS, java script et PHP et je voudrais savoir lorsque un membre est connecté, pour pouvoir l’afficher sur la page de d’autres membres pour qu’il puisse discuter.

Pour réaliser cela j’ai créer dans ma base de données un attribut actif, et lorsque l’utilisateur se connecte sur mon site je mets cette valeur a 1 pour dire qu’il est connecter et 0 sinon. Mais le véritable soucis je sais pas lorsque l’utilisateur quitte sur mon site comment le savoir pour remettre cette valeur a 0.

Merci pour vos réponses.

+0 -0

Tu ne peux pas le savoir, tu ne peux qu’estimer en fonction de son activité.

Une autre méthode plus complexe consciste à utiliser les websockets, et là tu sais précisément quand il a quitté la page… Mais rien ne l’empêche d’aller aux toilettes ou faire autre chose (auquel cas il n’est pas actif mais la page est toujours ouverte).

C’est un problème qu’on résoud en choisissant la solution qui nous convient le mieux mais aucune n’est vraiment idéale. Enregistrer la date de dernière activité et prendre tous les utilisateurs actifs dans les 10 ou 20 dernières minutes semble un bon compromis ;) .

Quand tu parles de la date de dernière activité je ne comprends pas bien.

melo96

Le dernier affichage de ta page, c’est-à-dire la dernière fois que ton script est affiché. Tu peux aussi envoyer un "ping" en Ajax (XHR) avec ton navigateur après 20 minutes pour dire que tu es toujours là.

Solution sans jQuery :

1
2
3
4
5
setInterval(function() { 
    var xhr = new XMLHttpRequest();
    xhr.open('GET', './script/ping.php');
    xhr.send();
}, 1200000 }); /* 60 sec * 20 * 1000 */

Solution avec jQuery :

1
setInterval(function() { jQuery.get("./script/ping.php"); }, 1200000 }); /* 60 sec * 20 * 1000 */

Le setInterval est généralement une mauvaise idée (bien qu’avec un interval aussi grand le risque soit très faible).

En outre il suffit de mettre à jour la date d’activité à chaque changement de page, c’est beaucoup plus simple que d’écrire un code qui fait de l’ajax !!

Le setInterval est généralement une mauvaise idée (bien qu’avec un interval aussi grand le risque soit très faible).

En outre il suffit de mettre à jour la date d’activité à chaque changement de page, c’est beaucoup plus simple que d’écrire un code qui fait de l’ajax !!

Nek

Et s’il a besoin de savoir si la page est toujours ouverte, il ne le fait pas ? Le code s’active après 20 minutes pour dire "Eh ! Je suis toujours là !". Elle implique donc de quand même ajouter un script php au début apres ton rooter/firewall.

Pour les -1 : Si vous êtes terrorisé par un DDOS de setInterval de 20 minutes (ce qui est dans le cas actuel impossible pour un petit site, il faudrait une fréquentation importante et un ping beaucoup plus faible), tu modifies légèrement le code :

En ajoutant un localStorage, pour s’assurer que si deux pages sont chargées, en même temps, elle n’envoie qu’un seul PING en tout et non deux pour chaque page ouverte (bien que maintenant le navigateur ne charge pas immédiatement l’onglet quand tu ne vas pas dessus).

Mais je voulais éviter de poster un code tout fait. ahah

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
if (localStorage) {
  localStorage.xhrPING = +new Date() + 1200000 * 1000;
  setInterval(function() { 
    if (localStorage.xhrPING < +new Date())
      return;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', './script/ping.php');
    xhr.send();
  }, 1200000 }); /* 60 sec * 20 * 1000 */
}

C’est à dire à chaque fois que l’utilisateur clique sur un lien ou bien un bouton j’écris un script ajax asynchrone qui change son heure d’activité. Est ce ca?

melo96

Au début de ton script, tu fais appelles à une fonction qui écrit la date de l’exécution du script dans ta base de données en SQL utilise la fonction NOW().

https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-dates-en-sql

Pour récupérer tes connectés :

1
datevisite < DATEADD(minute, 20, NOW()) 

Mais normalement tu devrais être capable de faire ça par toi même si tu as bien compris le fonctionnement d’un serveur HTTP et de php. Tu dois mélanger l’exécution de la page dans le navigateur et celui du serveur.

Le serveur PHP exécute le script PHP une seule fois lorsqu’il reçoit la requête HTTP. La page est ensuite fermée, il reconnait l’utilisateur uniquement grâce au cookie (identifiant) PHPSESSID que session_start() génère.

Je pense que les -1 c’est surtout parce que ta solution est complexe par rapport à ce que ça pourrait être.

Après je vais me citer moi même:

C’est un problème qu’on résoud en choisissant la solution qui nous convient le mieux mais aucune n’est vraiment idéale.

Donc il y a un choix à faire. :)

J’ai comme l’impression que OP est vraiment débutant, et n’a tout simplement pas encore vu la notion de sessions en php et se complique donc la vie à essayer de réinventer la roue. Je ne pense pas qu’il cherche des solutions aussi poussées.

Peut-être que je me trompe, mais si ce n’est pas le cas, je te conseille de te renseigner sur les sessions en php, ça fait exactement ce que tu cherches à faire.

+2 -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