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

Langage PHP Discussion :

Enregistrer une donnée en BDD à la fermeture de tous les navigateurs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Par défaut Enregistrer une donnée en BDD à la fermeture de tous les navigateurs
    Bonjour,

    Nouveau sur le forum, je viens chercher de l'aide à un problème. Soit personne ne l'a rencontré soit c'est tellement simple que je ne vois pas comment faire (et donc personne n'en parle car je n'ai rien trouvé sur le sujet).

    Situation : L'utilisateur se connecte à mon site, son status online est enregistré en BDD. S'il se déconnecte manuellement, il passe en offline dans la BDD. Jusque là tout va bien.

    Comment mettre le status en offline à la fermeture du navigateur. Certain propose la solution ajax avec onunload ou onbeforeunload comme "activateur" du script. Déjà, avec ce système, la fonction qui doit se lancer au onunload/onbeforeunload se lance au chargement de la page (logique hein...). Au rafraichissement je veux bien mais pas au premier chargement de la page.

    Je pensais travailler ainsi avec ce système :

    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
    window.onload=loadingPage('1');
    window.onunload=loadingPage('0');	
     
    function loadingPage(mode) {
    	if (window.XMLHttpRequest) {
    		var xmlhttp=new XMLHttpRequest();
    	}
    	else {
    		var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    	}
     
    	xmlhttp.onreadystatechange=function() {
    		if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    			var updateBool=xmlhttp.responseText;
    			// Done
    			alert(mode+" : "+updateBool);
    		}
    	}
     
    	xmlhttp.open("GET","loading_page.php?mode="+mode,true);
    	xmlhttp.send();	
    }
    du coup l'utilisateur est forcément déconnecté vu que unload/onbeforunload se lance à chaque chargement de page.

    En plus, je veux que ça fonction quand l'utilisateur ferme sa dernière fenêtre (en supposant qu'il a ouvert plein d'onglet et de fenêtre du site).

    Mon problème ne doit pas être impossible car sur tous les forums il y a un indicateur de membres online. Quand on ferme toutes les fenêtre du forum sur lequel on est, on apparait alors comme hors ligne pour les autres membres.

    Bref un casse tête car je ne vois pas du tout comment faire ce truc.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    les autres systèmes marchent avec un timer, en gros si le membre est inactif depuis 5 min il apparait déconnecté, y'a pas d'histoire de fermer le navigateur ou pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Par défaut
    ça serait donc ça... Je vais tester la chose et vous tient au courant. Merci pour l'info

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Par défaut
    Alors j'ai regardé et une question se pose : Si je lance le script a chaque fois que l'utilisateur utilise le site (script installé dans le fichier de session par exemple). Je teste bien le temps d'activité entre sa nouvelle action et la dernière mais ça ne permet pas de tester son activité une fois qu'il a quitter le site... Donc comment on fait pour lancer le script quand la personne ne fait plus rien, a fermer le navigateur et tout et tout ?

    mon code :

    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
    session_start();
     
    if (isset($_SESSION["time_before_abscent"]) && isset($_SESSION["time_before_disconnect"]) && isset($_SESSION["time_last_action"])) {
    	$time_before_abscent=$_SESSION["time_before_abscent"];
    	$time_before_disconnect=$_SESSION["time_before_disconnect"];
    	$time_last_action=$_SESSION["time_last_action"];
     
    	if (time()-$time_last_action>=$time_before_abscent && time()-$time_last_action<$time_before_disconnect) {
    		// Met le status en absent
    		mysql_query("...");
    	}
    	else if (time()-$time_last_action>=$time_before_disconnect) {
    		// Met le status en hors ligne
    		mysql_query("...");
    	}
    	else {
    		$_SESSION["time_last_action"]=time();
    	}
    }
    A mon avis, pour que ça marche il faudrait que le code de vérification d'activité se lance automatiquement toute les x secondes/minutes (et pas en ajax car si l'utilisateur ferme le navigateur il n'y aura pas de code pour lancer la requette...) Casse tête, je vois vraiment pas comment faire.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est l'utilisateur qui lance script

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Par défaut
    Merci, mais comment il peut le lancer s'il a fermé toutes les fenêtres voir éteint son ordinateur...

    C'est dans la procédure que je n'arrive pas à cerner comment faire

    Je suis perdu entre la durée de vie de la session et l'enregistrement de la date à laquelle l'utilisateur a fait sa dernière action. Sur gmail par exemple, au bout d'un certain temps d'inactivité, on passe en mode absent puis si ça dure en déconnecté.

    Il y a donc bien un moment donné où un script se lance pour passer l'utilisateur en absent ou en déconnecté sans que l'utilisateur ai fait quelque chose. La question est donc où et comment ?

Discussions similaires

  1. [C#] Récupération d'une donnée dans BDD Access
    Par Kerod dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/07/2014, 19h29
  2. Comment afficher une liste sur la même ligne avec tous les navigateurs
    Par Alexandrebox dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 25/07/2010, 03h05
  3. Réponses: 4
    Dernier message: 05/10/2009, 18h58
  4. Réponses: 4
    Dernier message: 10/09/2007, 12h05
  5. Réponses: 1
    Dernier message: 22/03/2006, 12h03

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