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 :

Détruire une session quand un onglet Firefox se ferme


Sujet :

Langage PHP

  1. #1
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Détruire une session quand un onglet Firefox se ferme
    Bonjour,

    Mon application fonctionnant sous Firefox, la session crée ne se détruit que si le navigateur Firefox est fermé entièrement.

    Par contre si je ferme l'onglet auquel se trouve l’application, la session n'est pas détruite : j'ai la possibilité d’exécuter une page sans se connecter.

    Comment faire pour détruire une session à la fermeture d'un onglet ?

    Merci des solutions.


    Cordialement.

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    En général, on ne souhaite pas détruire les sessions à la fermeture d'un onglet.
    Mais si c'est ce que tu veux faire, je pense que tu vas devoir utiliser un peu de javascript et même d'Ajax.
    Tu peux commencer par récupérer l'événement "onunload" sur ta page (ou un autre qui ressemble).
    Puis, dans la fonctionne appelée lors de cet événement, tu fais un appel ajax vers ton serveur pour détuire la session (jQuery est ton ami).

  3. #3
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    Donc si je comprends bien, il y'a pas un moment où il est préférable de détruire une session ?

    Pour l'evenement onunload : j'ai l'ai mis dans le <body>en faisant
    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
    <script type="text/javascript">
     function maFonction(){
    var xhr = getXhr();
    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function(){
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    if(xhr.readyState == 4 && xhr.status == 200){
    leselect = xhr.responseText;
    }
    }
    // Ici on va voir comment faire du post
    xhr.open("POST","destroy_session.php",true);  
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    xhr.send();
    
        }
     </script>
     <body onunload="maFonction();" >
    Dans destroy_session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $_SESSION = array(); // on réécrit le tableau
    session_destroy(); // on détruit le tableau réécrit
    	?>
    mais ça détruit pas la session si je ferme l'onglet ?

    Y'a-t-il n aménagement à faire ?

  4. #4
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Ton code m'a l'air correct. Si ta fonction javascript est bien appelée, et que ton appel Ajax est correct, alors ta session sera bien supprimée.
    • Vérifie bien que l'événément onunload appelle bien ta fonction (utilise firebug en débuggeur js ou bien met un alert dans ta fonction pour voir).
    • Vérifie bien que ta page php est appelée par la suite (toujours avec firebug, regarde ce qui passe sur le réseau, ou bien y'a aussi Ctrl+Maj+K qui est très bien).

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    En fait, il est préférable d'utiliser l'événement onbeforeunload au lieu de onunload.
    D'autre part, avant session_destroy(), ça peut être utile de mettre un petit session_start() non ?

  6. #6
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    C'est des pour des raisons de sécurité que j'ai voulu pousser en détruisant la session à la fermeture d'un onglet.

    Si c'est pas nécessaire, y'a t-il vraiment besoin ?

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Attention avec onbeforeunload car si je ne me trompe pas il sera appelé dès qu'un changement de page à lieux , pas seulement quand une page est fermée.

    Pour ce qui est de la nécessité de détruire la session à la fermeture de l'onglet il n'ya que toi qui peux en décider selon la criticité de ton environnement.
    La plus part du temps on se contente de la fermeture du navigateur.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par grunk
    Attention avec onbeforeunload car si je ne me trompe pas il sera appelé dès qu'un changement de page à lieux , pas seulement quand une page est fermée.
    C'est pas faux...

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/09/2007, 19h07
  2. détruire une session
    Par Maria1505 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 24/08/2007, 11h26
  3. Détruire une session à la fermeture d'une fenètre.
    Par dell77 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 07/12/2006, 17h12
  4. Détruire une session
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 28/09/2006, 02h22
  5. [JSP] détruire une session
    Par villeneuvejsp dans le forum Servlets/JSP
    Réponses: 24
    Dernier message: 03/08/2005, 14h44

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