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.
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 .
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à.
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 !!
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?
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
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().
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.
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.
My bad. En effet. Et du coup il faudra plutôt se tourner vers un cours sur le PHP, tel que celui d’open classroom (rah il faut que je finisse le mien ici ).
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