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] Comment fermer une session à la fermeture du navigateur?


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] Comment fermer une session à la fermeture du navigateur?
    une question qui revient sur plusieurs forums pour le développement web.

    Pour la faq ASP.NET, version Delphi.NET, dans section 5.Navigation.

    [QR] Comment fermer une session à la fermeture du navigateur?

    En utilisant l'évènement Javascript onBeforeUnload, nous pouvons faire n'importe quelle action lorsque l'utilisateur ferme le navigateur par la croix.
    NB : ne pas utiliser l'évènement Javascript onUnload qui est surchargé par l'évènement ASP.NET onUnload.

    Pour ce faire :
    1. 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
      13
      [...]
      <head>
        <title></title>
        <script language="javascript" id="clientEventHandlersJS">
          function window_onbeforeunload()
          {
             window.navigate('disconnect.aspx'); 
             //ne pas oublier de préciser le chemin si vous mettez la page dans un autre répertoire
          }
        </script> 
      </head> 
      <body language="javascript" onbeforeunload="return window_onbeforeunload()">
      [...]
    2. Créez la page disconnect.aspx.
      Avec Delphi 2005 : menu Fichier/Nouveau/Autres... puis sélectionnez Nouveaux fichiers ASP.NET/Page ASP.NET.
    3. 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
      6
       
      procedure TDisconnect.Page_Load(sender: System.Object; e: System.EventArgs);
      begin
        Session.Abandon; // pour terminer la session proprement
        //mettez ici le code que vous souhaitez exécuter à la fermeture du navigateur.
      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 de Ditch.

    Si vous avez des frames, 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 second bout de code uniquement dans navbar.aspx.
    --
    Arnaud DANEELS

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Cela ne marche pas chez moi. Il rentre bien dans la fonction réagissant à l'évènement onbeforeunload. J'ai testé en affichant un message de type "alert".

    Le navigateur tente de charger la page apparemment mais elle se ferme automatiquement.

    Voici mon code :

    <html>
    <head>
    <title></title>
    </head>
    <body>
    <script language="javascript">
    window.onbeforeunload = function() {
    alert ('test1');
    window.location = "redirecttest.html";
    alert('test2');
    }
    </script>
    </body>
    </html>

    Merci d'avance

  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
    Oui, ça ouvre la page disconnect.aspx qui fait juste un "session.abandon".

    en mettant un poitn d'arrêt dans Global.asax, à la fonction Session_End, on voit bien qu'il passe par là quand on ferme le navigateur.

    ton script est incorrecte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.location = "redirecttest.html";
    Ca doit redirigé vers une page ASPX (qui contient juste "Session.Abandon;" dans le page_load) et non vers une page HTML.

    Bien suivre ce qui est dit dans le post du 02/11/2006 pour corriger l'erreur
    --
    Arnaud DANEELS

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    J'avais simplifié le problème pour expliquer mon problème de redirection.

    J'ai remplacé par ma page Logoff.aspx qui se charge de faire le Session.Abandon.
    Jamais le Page_Load n'est chargé, après vérification par points d'arrets....

  5. #5
    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 tarrant17
    J'avais simplifié le problème pour expliquer mon problème de redirection.

    J'ai remplacé par ma page Logoff.aspx qui se charge de faire le Session.Abandon.
    Jamais le Page_Load n'est chargé, après vérification par points d'arrets....
    As-tu respecter à la lettre l'exemple ?

    Et pourquoi veux-tu rediriger l'utilisateur au moment où il ferme le navigateur ?
    Car rediriger le visiteur vers une page html qu'il ne verra pas, je ne comprends pas.
    --
    Arnaud DANEELS

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    J'ai bien tout fait ce qui était écrit ... mais il reconnait pas onbeforeunload ...

    Erreur 1 L'opérande 'AddressOf' doit être le nom d'une méthode (sans parenthèses).
    Avertissement 2 Validation (XHTML 1.0 Transitional) : L'attribut 'onbeforeunload' n'est pas un attribut valide de l'élément 'body'.
    D'ailleurs il ne connait pas l'attribut language mais j'ai mis lang à la place.

  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
    pour que le 'onbeforeunload' de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body language="javascript" onbeforeunload="return window_onbeforeunload()">
    soit recconu, il faut écrire la fonction javascript dans la partie head de la page html ou alors c'est que "language="javascript" " a été oublié.
    --
    Arnaud DANEELS

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    ben en fait j'ai mis lang="javascript" car il ne reconnait pas language mais ca devrait etre équivalent ...

    finalement j'ai fait comme tarrant17 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script language="javascript">
    window.onbeforeunload = function() {
    alert ('test1');
    window.location = "redirecttest.html";
    alert('test2');
    } 
    </script>
    et ca fonctionne, mais maintenant j'ai un problème au niveau de firefox.

    Alors j'ai trouvé ca :

    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
     
    if(document.all) 
    { //Sous IE
        window.onbeforeunload = function(e) {
     
            alert("ie");
            var y = event.clientY;
            alert(y);
            if (y < 0) {
                window.location = "disconnect.aspx";
                alert('test2');
            }
            else {
                alert('test3');
            }
        }  
    } else 
    { //Sous pas IE
        window.onbeforeunload = function(e) {
            alert("pas ie");
            var y = e.pageY; 
            alert(y);
            if (y < 0) {
                window.location = "disconnect.aspx";
                alert('test2');
            }
            else {
                alert('test3');
            }
        }
    }
    Mais ca ne marche toujours pas sous firefox
    Quand j'affiche alert(y); Il me met undefined ...

  9. #9
    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 Zéli
    Alors j'ai trouvé ca :

    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
     
    if(document.all) 
    { //Sous IE
        window.onbeforeunload = function(e) {
     
            alert("ie");
            var y = event.clientY;
            alert(y);
            if (y < 0) {
                window.location = "disconnect.aspx";
                alert('test2');
            }
            else {
                alert('test3');
            }
        }  
    } else 
    { //Sous pas IE
        window.onbeforeunload = function(e) {
            alert("pas ie");
            var y = e.pageY; 
            alert(y);
            if (y < 0) {
                window.location = "disconnect.aspx";
                alert('test2');
            }
            else {
                alert('test3');
            }
        }
    }
    Mais ca ne marche toujours pas sous firefox
    Quand j'affiche alert(y); Il me met undefined ...
    Ha là, ça dépasse mes connaissances en javascript. Je n'utilise le javascript que pour quelques actions et j'avoue que je connais très peu (pas encore le besoin de me plonger dedans mais ça ne va pas tarder).

    Je pense que je n'ai testé qu'avec IE quand j'ai écrit cela car le site pour lequel j'avais regardé ne fonctionnait de base que sous IE. (en effet, j'aurai pu le préciser! )

    Vu que c'est un problème purement javascript, je t'invite à poser la question en faisant abstraction du côté ASP.NET dans un forum javascript.
    Sinon, au cas où mais je pense que tu as déjà regardé! : javascript bien activé sous Firefox ? (Outils>Options>Contenu>Activer Javascript)

    adaneels
    --
    Arnaud DANEELS

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    bon bah alors, voilà ou j'en suis :

    Sous internet explorer j'arrive a avoir le clientY ... le seul hic c'est que ... si je clique sur la fleche precedent (y<0 --> donc je ferme la session) et si je fais fichier/fermer (y>0 --> la session ne se ferme pas )

    Sous firefox je n'arrive toujours pas a avoir les coordonnées mais je peux avoir le target de l'élément, or la croix fichier/fermer ou autres sont de type HTMLDocument bah le hic c'est que la flèche précédent aussi ...

    Et sous IE il y a srcElement comme équivalent à target, mais j'arrive pas à le faire marcher

    Voili voilou

Discussions similaires

  1. Détruire une session à la fermeture du navigateur
    Par Akramweb dans le forum Langage
    Réponses: 12
    Dernier message: 30/01/2014, 21h56
  2. Réponses: 2
    Dernier message: 13/04/2010, 12h35
  3. Réponses: 0
    Dernier message: 12/04/2010, 20h53
  4. [BOXI R2] Comment fermer une session/utilisateur ?
    Par wellboy dans le forum Administration-Migration
    Réponses: 3
    Dernier message: 26/11/2007, 11h13
  5. fermer une session à la fermeture du navigateur
    Par phpieur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/08/2007, 16h15

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