IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Détecter l'inactivité d'un utilisateur de manière élégante (requestIdleCallback ?)


Sujet :

JavaScript

  1. #1
    Membre habitué
    Homme Profil pro
    Electron libre since 80's
    Inscrit en
    Juillet 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Electron libre since 80's
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 92
    Points : 137
    Points
    137
    Par défaut Détecter l'inactivité d'un utilisateur de manière élégante (requestIdleCallback ?)
    Bonjour,

    Je cherche à delogger (chose que je sais faire) un utilisateur après x minutes d'activité.

    requestIdleCallback me semble le plus élégant (= utilise le moins de ressources) opposé à des timer et event clavier, souris... mais je m'y perds malgré ce que j'ai pu voir sur le net.

    Des idées ? Ah, pas de jQuery SVP, j'suis Vanilla JS !

    Dans un 1er temps, je cherche à faire des choses simples (envoyer un mail au chef pour dénoncer l'utilisateur :-), sauvegarder le travail en cours puis delogger).

    Après (enfin si j'ai bien compris comment ça fonctionne), j'envisagerai du plus lourd (miner des bitcoins, calculer l'âge du capitaine, combien de temps le fût met-il pour se refroidir après que l'obus a été tiré ?, pourquoi « 42 » est la réponse à la Grande Question de l'Univers).

    Merci par avance.
    C'est quand un homme voit un moustique posé sur un de ses testicules qu'il comprend que la violence ne peut pas résoudre tous les problèmes.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Le méthode client ne semble pas sécure.
    Un timer coté client qui lancerait un ajax de déconnexion laisse la possibilité à l'utilisateur d'intervenir sur le timer.
    Perso j'aborderais cela plutôt coté serveur en utilisant les sessions.
    https://www.codegrepper.com/code-exa...+session+timer
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 465
    Points : 4 650
    Points
    4 650
    Par défaut
    j'opterai pour un mix des 2 :

    un appel ajax qui fait office de "heartbeat" pour signaler au serveur que l'on est toujours actif (pour les sessions php)
    et un timeout de session php

    le probleme avec la solution 100% php, c'est que l'utilisateur peut etre en train de lire la page... en soit, il est toujours "actif", mais le serveur ne le sait pas

    pour ta solution requestIdleCallback, ce n'est pas ce que tu crois : cette methode permet juste de lancer une tache quand le navigateur a fini ses calculs, et non pas quand il est "idle" comme nous l'entendons...
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Membre habitué
    Homme Profil pro
    Electron libre since 80's
    Inscrit en
    Juillet 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Electron libre since 80's
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 92
    Points : 137
    Points
    137
    Par défaut
    Merci de vos contributions.

    La méthode window.requestIdleCallback() mémorise une fonction qui sera appelée lorsque le navigateur n'aura plus aucune autre tâche en cours.
    => d'où ma méprise dans l'interprétation

    Server side : ce n'est pas une solution pour moi.

    En fait, l'utilisateur récupère une liste de produits et les prépare (client side) sans plus d'interaction avec le serveur (sauf si nécessaire) pour garantir les temps de réponse. Tout est stocké en localStorage.
    Je veux utiliser les temps morts client side pour mettre à jour le serveur (Ajax) même si tous les produits ne sont pas préparés et éventuellement déconnecter l'utilisateur (server side) par ex s'il est parti déjeuner.

    J'essaie de trouver une façon moins bourrine que des timers.
    C'est quand un homme voit un moustique posé sur un de ses testicules qu'il comprend que la violence ne peut pas résoudre tous les problèmes.

  5. #5
    Membre habitué
    Homme Profil pro
    Electron libre since 80's
    Inscrit en
    Juillet 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Electron libre since 80's
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 92
    Points : 137
    Points
    137
    Par défaut
    Bon, j'ai choisi cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function autoTimer()
    {	let t;
    	window.onload=autoTimerReset();
    	window.onmousemove=autoTimerReset();
    	window.onmousedown=autoTimerReset();	
    	window.ontouchstart=autoTimerReset();
    	window.onclick=autoTimerReset();
    	window.onkeypress=autoTimerReset();
    	window.addEventListener('scroll',autoTimerReset,true);
        function autoTimerAction()
    	{	let fct=localStorage.getItem("function")
    		alert("logout");
    		if (fct==_TAB_PICKMAIN || fct==_TAB_PICKEXT)
    		{	// Commande en cours de préparation
    			autoTimer();
    			// Action : sauvegarder l'état de la commande (Ajax)
    		}
    		else if (fct!=_CMD_LOGOUT)
    		{	// Action : se déconnecter
    		}
        }
        function autoTimerReset()
    	{	clearTimeout(t);
    		t=setTimeout(autoTimerAction,_LOGOUT_TIME);
        }
    }
    C'est quand un homme voit un moustique posé sur un de ses testicules qu'il comprend que la violence ne peut pas résoudre tous les problèmes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détecter la langue de l'utilisateur
    Par Orian dans le forum Général Java
    Réponses: 1
    Dernier message: 09/03/2008, 07h50
  2. [Stratégie] Détecter l'inactivité de l'utilisateur
    Par lambdacrash dans le forum Général Java
    Réponses: 3
    Dernier message: 26/11/2007, 14h11
  3. Inactivité d'un utilisateur
    Par yenGo dans le forum Langage
    Réponses: 7
    Dernier message: 05/04/2006, 14h46
  4. Détecter l'inactivité du modem
    Par smyley dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2005, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo