Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réinitialiser settimeout au moindre évenement

Sujet résolu
    15 octobre 2016 à 16:42:58

    Bonjour,

    J'ai un petit système pour déconnecter automatiquement une personne au bout d'un certain temps :

    <script language="javascript" type='text/javascript'>
        function session(){
            window.location="dec.php"; //page de déconnexion
        }
        setTimeout("session()",300000);
    </script>

    Si l'utilisateur est actif, avec ce code il va tout de même être déconnecter. J'aimerais modifier le code pour qu'il détecte tout les événement qui se déclanchent sur la page et réinitialiser le settimeout. Existe-il une sorte de super-événement qui engloberait tout les autres (click, scroll, dbclick, keydone/up...) ? 

    -
    Edité par azzeryx 15 octobre 2016 à 16:44:24

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2016 à 20:32:15

      Salut,

      Je n'ai pas la solution mais tu devrais poster ceci dans le forum JAVASCRIPT

      Par contre tu peux supprimer les attributs de ta balise <script> ils sont devenu obsolétes.

      Bon courage

      EDIT : ok on est dans le forum JAVASCRIPT quel con XD

      -
      Edité par Sanatorium 15 octobre 2016 à 20:33:31

      • Partager sur Facebook
      • Partager sur Twitter
      Mysteries are revealed in the light of reason
        19 octobre 2016 à 13:44:51

        Merci je ne savais pas que si ces attribut était utile ou pas.

        Quelqu'un d'autre aurait-il une idée alors ?

        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2016 à 13:50:03

          Bonjour, je pense qu'avec 2 listeners tu peux t'en sortir.

          onmousemove

          onkeydown

          On va considérer qu'en scrollant il bouge la souris un minimum ;). Difficile d'ètre actif sans clavier et sans souris. Ou alors il a sa souris sur la barre de scroll et il l'utilise sans la faire entrer dans la page...mais faut le vouloir quand meme :).

          -
          Edité par Krogoth 19 octobre 2016 à 13:50:35

          • Partager sur Facebook
          • Partager sur Twitter
          Un petit +1 si je vous ai aidé est toujours appréciable :).
            19 octobre 2016 à 16:02:08

            Salut,

            En visitant un peu les topics OCR sur ça, j'ai trouvé ceci :

            https://openclassrooms.com/forum/sujet/detecter-l-inactivite-d-un-utilisateur-38698

            • Partager sur Facebook
            • Partager sur Twitter
            Mysteries are revealed in the light of reason
              19 octobre 2016 à 17:41:07

              Très bien, mais il conviendrait d'ajouter ontouchstart pour les possesseurs de téléphones et autres tablettes !

              Et puis, un simple renouvellement du setTimeout (après un clearTimeout) à l'ouverture de la page ou lors de la dernière activité paraît suffisant. Dans ces conditions ces quelques lignes devraient convenir (avec 5 secondes seulement et un alert pour le test)

              var activeUser;
              window.onload=window.onmousemove=window.ontouchstart=window.onkeydown=function(){
                 clearTimeout(activeUser);
                 activeUser=setTimeout(function(){alert('inactif')},5000);
              }

              En outre, les évènements pourraient être installés plus proprement si nécessaire...

              -
              Edité par 007julien 20 octobre 2016 à 11:49:14

              • Partager sur Facebook
              • Partager sur Twitter
                20 octobre 2016 à 20:33:27

                Merci pour toutes ces solutions.
                Je pense reprendre le code de 007julien tout en apportant peut êtres quelques améliorations.
                Par exemple je vais ajouter ajouter un message d'alerte avant la fin su settimeout. D'ailleurs existe il un moyen d'afficher un alerte avec un message dynamique (type compte à rebours)  ?
                Je vous mettrai ici le code une fois terminé,merci encore.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 octobre 2016 à 8:35:46

                  Tu peux utiliser sweetalert. Tu peux utiliser du html dedans donc à priori tu dois pouvoir y mettre un compte à rebours.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Un petit +1 si je vous ai aidé est toujours appréciable :).
                    24 octobre 2016 à 18:32:59

                    Comme promis voici mon code finale :

                    <script>
                    var compte = 60;
                    function decompte()
                    {
                            if(compte <= 1) {
                            pluriel = "";
                            } else {
                            pluriel = "s";
                            }
                     
                        document.getElementById("compt").innerHTML = compte + " seconde" + pluriel;
                     
                            if(compte == 0 || compte < 0) {
                            compte = 0;
                            window.location.replace("site.php?section=deconnexion"); 
                            clearInterval(timer);
                            }
                     
                        compte--;
                    }
                    
                    var timer;
                    
                    function deco() {
                        document.getElementById('deco_compte').style.display = 'block';
                        timer = setInterval('decompte()',1000);
                    }
                    
                    var activeUser;
                    
                    window.onload=window.onmousemove=window.ontouchstart=window.onkeydown=window.onscroll=function(){
                        clearTimeout(activeUser); 
                        activeUser=setTimeout(function(){ deco(); },600000);
                    }
                    
                    function annul_deco() {
                        document.getElementById('deco_compte').style.display = 'none';
                        document.getElementById("compt").innerHTML = '';
                        compte = 60;
                        clearInterval(timer);
                    }
                    </script>
                    
                    <div id="deco_compte" style="display: none; border: 2px dashed gray; background-color: white; position: fixed; left: 30%; top: 30%; width: 300Px; height: 150px;">
                        Vous allez être déconnecter dans <span id="compt"></span> car vous êtes inactifs depuis trop longtemps.<br /><br />
                        <button onclick="annul_deco();">OK</button>
                    </div>



                    • Partager sur Facebook
                    • Partager sur Twitter

                    Réinitialiser settimeout au moindre évenement

                    × 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