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

Contribuez .NET Discussion :

[D1] Peut-on savoir si le navigateur a été fermé ?


Sujet :

Contribuez .NET

  1. #1
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut [D1] Peut-on savoir si le navigateur a été fermé ?
    Bonjour,

    Un problème pour lequel je n'ai pas trouvé de solution en asp.net.

    Le but est qu'un utilisateur ne puisse se connecter simultanément qu'une seule fois. (un utilisateur ne peut pas avoir deux sessions en même temps).

    J'ai claqué la liste des utilisateurs dans une base, avec une petite colonne où je mets 1 à l'ouverture d'une session, 0 à la fermeture. Tout fonctionne bien : je sais quels utilisateurs sont connectés ou non.

    Mais voilà que si l'utilisateur béta ferme son navigateur au lieu de cliquer sur "déconnecter", le serveur ne reçoit rien (je trouve ça normal, même si j'aurai aimé être averti ), les évènements session_end ou application_end ne sont pas effectués et pour moi, il restera éternellement connecté!
    Donc apparemment, pas de moyen de savoir si le client a fermé son navigateur. C'est vrai ou j'ai loupé quelquechose ?

    Bilan : avez-vous une solution pour gérer ça (faire en sorte de n'avoir qu'une connexion à la fois par client) ?

    PS : en cherchant par le net, je n'ai remarqué qu'une solution : la méthode unload du javascipt. Des personnes qui disent que ça marche, d'autres non.
    Donc j'ai toujours ça en dernier recours.

    Arnaud DANEELS
    --
    Arnaud DANEELS

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    Aucune possibilité de savoir si le navigateur a été fermé (sauf à passer par beaucoup de javascript pour récupérer un évènement unload légèrement modifié :p)

    Par contre si tu as laissé par défaut la session (InProc je crois). Tout le code que tu as mis dans la méthode Session_End du Globlal.asax s'exécutera lors du Timeout.

    C'est ainsi que je gère les choses de mon côté, et ça marche très bien :p

  3. #3
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    Résolu

    En fait, il ne faut pas utiliser l'évènement OnUnload car il y a aussi un évènement OnUnload ASP.NET sur la webform et c'est celui-ci qui sera déclenché (et pas seulement lors de la fermeture du navigateur, chercher un peu dans les docs respectives).
    (et certains se sont fait avoir sans savoir pourquoi d'après ce que j'ai vu sur le net)

    Par contre, il y a un évènement onBeforeUnload et ça marche impec avec !

    Voilà une soluce qui va bien :
    - dans le code aspx de la page où vous voulez capter l'évènement "fermeture du navigateur" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [...]
      <head>
        <title></title>
        <script language="javascript" id="clientEventHandlersJS">
          function window_onbeforeunload()
          {
             window.navigate('disconnect.aspx');
          }
        </script>
      </head>
      <body language="javascript" onbeforeunload="return window_onbeforeunload()">
    [...]
    - la page disconnect.aspx, ajouter une nouvelle page aspx au projet (Fichier/Nouveau/Autres... - Nouveaux fichiers ASP.NET/Page ASP.NET avec Delphi 2005). Mettez ensuite ceci dans l'évènement Page_Load de cette page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TDisconnect.Page_Load(sender: System.Object; e: System.EventArgs);
    begin
      Session.Abandon;
    end;
    Résultat : lorsque l'utilisateur fermera son navigateur, l'évènement Session_End du global.asax se déclenche.
    Pour l'utilisation des sessions et du fichier global.asax, je vous conseille de lire ce document.
    NB : vous pouvez mettre le code qui vous arrange dans ce Page_Load, il sera déclenché à la fermeture du navigateur mais le plus propre est tout de même de fermer la session et de travailler dans le session_end.

    Arnaud DANEELS

    edit : vous trouverez une même façon de faire dans la faq asp.net, version VB.NET mais un copier-coller du code ne fonctionnait pas pour moi.
    edit2 (décidément) : si vous avez des frames (comme moi, malheureusement), mettez ce code dans une seule frame.
    exemple : vous avez une page default.aspx qui contient des frames, une frame "coteGauche" qui contient toujours une page navbar.aspx et une frame "content" qui contient n'importe quelle page dans le reste. Mettez le bout de code dans navbar.aspx, rien dans les autres pages déjà existantes.
    --
    Arnaud DANEELS

  4. #4
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    voir pour la faq asp.net/delphi

  5. #5
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par adaneels
    edit : vous trouverez une même façon de faire dans la faq asp.net, version VB.NET mais un copier-coller du code ne fonctionnait pas pour moi.
    Lorsqu'une question vous parait incorrecte, n'hésitez pas à le signaler au responsable de faq, en l'occurence moi pour asp.net.

    Didier

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  6. #6
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par Ditch
    Lorsqu'une question vous parait incorrecte, n'hésitez pas à le signaler au responsable de faq, en l'occurence moi pour asp.net.

    Didier
    autant pour moi, j'avais commencer ce message car je ne trouvais pas la solution (je pensais qu'il y avait le même contenu dans les versions des faq asp.net donc je n'avais pas les versions vb.net et c#).
    J'ai fini ce message pour passer le message en résolu.
    Et j'ai passé le mot à neo.51 car il est l'auteur de la plupart des messages de la faq asp.net, version Delphi.net.

    Désolé, c'est à toi que j'aurai du passer le mot.
    --
    Arnaud DANEELS

  7. #7
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    zut, j'avais pas fait gaffe que ce message était déjà dans ce forum.
    Ben au moins, la QR est rédigée proprement
    --
    Arnaud DANEELS

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2008, 18h21
  2. Comment savoir si mon navigateur est ouvert ?
    Par Chris33 dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 18/07/2006, 14h51
  3. Savoir si le navigateur accepte les ActiveX
    Par Etanne dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/05/2006, 14h33
  4. [Système]comment peut on savoir si java tourne sur l'ordi?
    Par loveflower dans le forum Général Java
    Réponses: 2
    Dernier message: 03/01/2005, 18h01
  5. peut-on savoir si un champ a une sequence??
    Par e11137 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2004, 14h54

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