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 :

Fermeture du navigateur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut Fermeture du navigateur
    Bonjour,

    !Je ne suis pas sûr d'être au bon endroit pour poser ma question ou du moins mon problème !

    J'ai créé un site pour lequel j'ai des adhérents et j'offre la possibilité de voir qui est en ligne et qui ne l'est pas.

    Lorsqu'un adhérent quitte le site en se déconnectant via un bouton, il disparait de la liste des adhérents en ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into tbladherent set enligne=0 where id=???
    J'utilise une table qui fait cela bien et jusqu'ici tout va bien.

    Par contre, si un adhérent ferme son navigateur, la mise à jour de la table contenant le champ enligne ne se fait pas et pour cause puisqu'il force la non exécution du code php.

    Donc ma question est la suivante : comment peux-tu mettre à jour une table si un adhérent ferme le navigateur sans préalablement utiliser le bouton déconnexion du site ?

    Merci

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    c'est l'éternelle question qui ne trouve jamais réponse satisfaisante...

    Tu seras obligé d'implémenter un système de timeout pour gérer ton problème, un peu comme ce qui est mis dans la FAQ

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Bonjour,

    Oui en effet. Mais j'avais déjà consulté la FAQ préalablement et utilisé cette technique. Mais mes sessions sont d'une demi-heure et malheureusement, comme je l'ai dit, si le navigateur se ferme, alors impossible de mettre à jour la base de données.

    Cependant, après quelques recherches, je tente actuellement d'utiliser javascript et xmlhttprequest via :

    fichier js :
    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
    27
    28
    29
    30
    31
    32
    33
    34
     
    function getXMLHttpRequest() {
    	var xhr = null;
     
    	if (window.XMLHttpRequest || window.ActiveXObject) {
    		if (window.ActiveXObject) {
    			try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch(e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		} else {
    			xhr = new XMLHttpRequest(); 
    		}
    	} else {
    		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    		return null;
    	}
     
    	return xhr;
    }
     
     
    function Deconnexion()
    {
    var xhr = getXMLHttpRequest(); 
    xhr.onreadystatechange = function() {
    	if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    		alert('OK'); 
    	}
    }; 
    xhr.open('GET', 'deconnexion.php', true);
    xhr.send(null);
    }
    dans deconnexion.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    	session_start();
    	mysql_query("UPDATE tblconnexion SET date_lastconnexion = now(), enligne='0' WHERE id_adherent=".$_SESSION['utilisateur']['id']);
     	$_SESSION = array();
     	session_unset();
     	session_destroy();
     
    ?>
    et dans la balise body du html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onbeforeunload="Deconnexion();">
    Mais j'ai une fenêtre d'alerte qui s'ouvre avec le mot "OK" quand j'actualise et aucune mise à jour de la table tblconnexion et quand je ferme le navigateur, je n'ai AUCUNE fenêtre !

    Je ne comprends pas.

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Bonjour,

    Il doit bien exister un moyen d'identifier la fermeture du navigateur !

    Ou alors peut-être d'agir sur le serveur ?

    Personne n'a d'idées ?

  5. #5
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    On ne peut jamais vraiment savoir quand un utilisateur ferme son navigateur.

    Le plus simple je pense pour l'indicateur d'activité/inactivité est d'ajouter à ta table tblconnexion une colonne de date.
    Cette colonne correspondra à la date de la dernière action faite par l'utilisateur. Soit un update à chaque page vue.
    Pour savoir si un utilisateur n'est plus connecté, il suffit de comparer la date à l'instant t avec la date en base. Si la différence entre ces deux dates est d'une durée supérieur à Xmin alors il faut changer le status de cet utilisateur.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Citation Envoyé par BornBanane Voir le message
    On ne peut jamais vraiment savoir quand un utilisateur ferme son navigateur.

    Le plus simple je pense pour l'indicateur d'activité/inactivité est d'ajouter à ta table tblconnexion une colonne de date.
    Cette colonne correspondra à la date de la dernière action faite par l'utilisateur. Soit un update à chaque page vue.
    Pour savoir si un utilisateur n'est plus connecté, il suffit de comparer la date à l'instant t avec la date en base. Si la différence entre ces deux dates est d'une durée supérieur à Xmin alors il faut changer le status de cet utilisateur.
    Oui cela, je l'ai déjà fait et j'ai fixé une durée de 30min. Au-delà, la session se ferme et la colone de date se met à jour automatiquement.

    Cependant, le site que je concois et un site plus de lecture que de saisie, donc je crois qu'il est préférable que j'oriente mes recherches vers de l'ajax et la modification de la date dès que je clique sur un élément du navigateur (scrollbar, ...) ou sur un élémen t html de la page (bouton, ...).

    Est-ce qu'un évènement javascript permet d'identifier un clic sur la barre de déroulement ou sur les boutons du menu du navigateur ?

  7. #7
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    Citation Envoyé par bastien Voir le message
    Bonjour,

    Il doit bien exister un moyen d'identifier la fermeture du navigateur !

    Ou alors peut-être d'agir sur le serveur ?

    Personne n'a d'idées ?
    la fonction onunload s'active à la fermeture du client, cependant ce n'est pas une vérité absolue puisque si ton navigateur plante cette fonction n'est pas appelée.

    agir sur le serveur est impossible sauf en utilisant de l'ajax.

    donc utilisation d'ajax avec la fonction onunload mais aussi comme l'indique BornBanane utiliser également un ou deux champs de ta table afin d'y stocker la date et l'heure de la dernière connexion afin de supprimer ou non ta session
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  8. #8
    Membre très actif
    Avatar de FERDIKAM
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2005
    Messages : 123
    Par défaut
    Est ce que les sessions ne sont-elles pas adaptées en réglant la durée de la session ?

Discussions similaires

  1. [IMG] fermeture du navigateur web
    Par stolx_10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/10/2006, 17h41
  2. Réponses: 2
    Dernier message: 29/08/2006, 17h27
  3. [Mail] Envois mail à la fermeture du navigateur
    Par nicoaix dans le forum Langage
    Réponses: 4
    Dernier message: 21/06/2006, 15h38
  4. [Javascript] modifier des variables a la fermeture du navigateur
    Par kespy13 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2006, 15h35
  5. [MySQL] Vider une table à la fermeture du navigateur
    Par cheucher dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/03/2006, 13h20

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