Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete AJAX à la fermeture de la fenêtre

    4 juillet 2009 à 21:48:48

    Bonsoir. J'ai une variable booléenne dans ma base de donnée qui permet de savoir si un joueur est en ligne ou non. J'aimerai faire en sorte que cette variable soit modifiée lorsque l'utilisateur ferme son navigateur ou son onglet.
    Avec beforeunload je m'en sors, l'ennui c'est qu'il s'effectue lorsque je change de page aussi, alors que je voudrais que cela ne se fasse que lors d'une fermeture d'onglet, navigateur ou d'un alt+F4.


    Edit : MMmmm je viens de penser à un truc. Si j'utilise un setTimeout par exemple toutes les 20 secondes sur la page d'un membre, qui enregistre dans la base de donnée le timestamp actuel. Ensuite dans l'affichage des membres en ligne pour les autres joueurs, on regarde si un membre n'a plus enregistré de nouveaux timestamp depuis plus de 30 secondes, il sera ainsi considéré comme hors ligne. J'envisagerai même de faire cela à chaque seconde, mais j'ai peur que cela ne soit trop lourd pour le serveur si tous les joueurs effectuent des update sur la base de données.
    • Partager sur Facebook
    • Partager sur Twitter
      4 juillet 2009 à 22:47:28

      Essaie l'évenement onUnload.

      Edit : Je crois que cet évenement aussi est enclenché quand on change de page. Ce que tu peux faire, c'est l'utiliser quand même, et à chaque début de page, ajouter l'évenement onLoad puis modifier le booleen sur true. Et evidemment tu mets l'evenement onUnload, et là tu mets le booleen sur False.
      • Partager sur Facebook
      • Partager sur Twitter
        4 juillet 2009 à 22:50:16

        Et bien non j'ai déjà essayé, le problème est que l'utilisateur serait déconnecté en changeant de page, ce qui s'avère être très gênant.
        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2009 à 22:51:04

          J'ai édite mon message plus haut.
          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2009 à 22:55:02

            J'y ai pensé, l'ennui c'est que je ferme les sessions tout en modifiant le booléen. Donc même si dans le onload je modifie le booléen, cela ne me récupérera pas mes sessions.

            J'ai pensé à autre chose au pire, ce serait de réaliser tout mon site avec des requête Ajax, ainsi pas besoin de changer de page, tout se ferait sur ma page index, mais je pense que ça risque d'être assez compliqué à mettre en place.
            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2009 à 23:04:30

              J'ai pas très bien saisis ça :

              "J'y ai pensé, l'ennui c'est que je ferme les sessions tout en modifiant le booléen. Donc même si dans le onload je modifie le booléen, cela ne me récupérera pas mes sessions."
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2009 à 23:08:08

                Par exemple, si tu fermes ton navigateur, tes sessions sont détruites.
                Cependant si tu fermes seulement l'onglet, le joueur passerait alors son booléen à false, donc hors ligne, mais pourrait continuer à jouer, ce qui empêcherait les autres joueurs de l'agresser. C'est pour cela que lors du unload, je détruis aussi les sessions.
                • Partager sur Facebook
                • Partager sur Twitter
                  4 juillet 2009 à 23:13:50

                  Ou sinon tu crée une variable de sessions pour chaque page pour chaque membre, et dès que la personne quitte, tu mets la variable de la session de la page X sur false...je sais pas si ça peut marcher, mais c'est rapide comme méthode.

                  Parce que faire ça dynamiqueemnt, faudrait opter pour l'Ajax effectivement.

                  Voilà c'est la seule idée qui me vienne en ce moment...après ça fait des mois que j'ai pas codé, donc me souvient pas de tout.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 juillet 2009 à 13:34:16

                    Onbeforunload s'effectue à chaque déchargement de la page, donc si je change de page ça ne marche pas.
                    Mais bon je vais essayer de faire en sorte que tout le site ne fonctionne que sur une seule page, je ferai des includes grâce à ajax. Enfin je vais essayer^^ Si vous avez une solution je suis preneur sinon.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 juillet 2009 à 17:29:43

                      Je crois que, que ce soit avec onunload, ou onbeforeunload, il n'y a pas franchement le temps de faire une requête Ajax...

                      Tout juste le temps d'ouvrir une popup ou une boîte de dialogue...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 juillet 2009 à 17:50:40

                        Nan ben écoute l'update dans ma base de données passe avec onbeforeunload. L'ennui c'est que je dois pas changer de page.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 juillet 2009 à 18:04:20

                          Bonjour,

                          j'avais essayé de faire un site tout en ajax dans lequel on n'avait jamais besoin de recharger les pages. Avec de l'organisation, ça passe très bien :) (suffit de vérifier en permanence si le login et password sont correct a chaque fois que tu veux afficher une page).

                          En qui concerne ton problème, il n'y a, à ma connaissance, aucun moyen de distinguer si l'utilisateur quitte la fenêtre ou change de page. Une solution serait peut-être de faire que lorsque l'utilisateur clique sur un lien de la page, tu n'exécutes pas le code contenant la requête ajax de déconnexion.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 juillet 2009 à 0:32:32

                            Oui j'ai envisagé cette possibilité la, mais bon je pense qu'un site complètement en ajax peut être agréable pour le visiteur, et ca m'entraînera un peu à ma programmation en javascript/ajax ca ne peut que me faire du bien ^^
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Requete AJAX à la fermeture de la fenêtre

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown