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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    juillet 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : juillet 2016
    Messages : 20
    Points : 27
    Points
    27
    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.

  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
    38 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    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 : 38 721
    Points : 64 503
    Points
    64 503
    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 !

    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  3. #3
    Membre expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 1 997
    Points : 3 493
    Points
    3 493
    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
    Nouveau membre du Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    juillet 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : juillet 2016
    Messages : 20
    Points : 27
    Points
    27
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    juillet 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : juillet 2016
    Messages : 20
    Points : 27
    Points
    27
    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);
        }
    }

+ 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, 08h50
  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, 15h11
  3. Inactivité d'un utilisateur
    Par yenGo dans le forum Langage
    Réponses: 7
    Dernier message: 05/04/2006, 15h46
  4. Détecter l'inactivité du modem
    Par smyley dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2005, 22h30

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