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 :

Sessions et navigation ajax


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut Sessions et navigation ajax
    Bonjour à tous,

    J'ai une appli web en full ajax (navigation ajax entre autres).
    Sur cette appli, j'ai zappé un détail : la vérification de la validité de la session lors des appels ajax.
    Du coup, mon appli ne quitte pas lorsque la session a expiré.

    Pour résoudre cela, je pourrai aller modifier tous mes fichiers php appelés par l'ajax pour ajouter des contrôles de session avec renvoi d'une valeur spécifique si session expirée et dans le résultat de l'appel ajax un déclenchement d'une redirection vers page login si on reçoit l'info de session expirée.
    Le problème avec cette solution c'est qu'il va falloir retravailler plus d'une centaine d'appels ajax et là ça devient un boulo fastidieux

    J'en appelle donc à vos lumières pour savoir si quelqu'un aurait une autre idée plus simple pour que mon appli quitte dès que la session expire.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 805
    Points
    4 805
    Billets dans le blog
    6
    Par défaut
    une question, tes pages PHP on elles un partie de code commune dans un include
    si oui tu vas gagner plein de temps ^^
    Rien, je n'ai plus rien de pertinent à ajouter

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    J'ai effectivement un include commun à toutes les page.
    Néanmoins, même en incluant un test dans ce include, il faudra que j'aille quand traiter le cas dans le résultat de chaque appel ajax...
    Ou alors il y a une astuce que je ne connais pas...

    Sinon j'avais pensé (mais pas testé), ajouter un listener sur la totalité de l'appli pour dès qu'un clic est fait, cela déclenche un appel ajax pour vérifier la session et traiter le résultat mais j'ai peur que cela soit un peu lourd.

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Du coup, mon appli ne quitte pas lorsque la session a expiré.
    Etant donné qu'en théorie (et c'est bien de faire pareil en pratique) une session se clos automatiquement à la fermeture du navigateur (pas avant, ni après), ton problème ne devrait pas se poser.

    Ceci étant dit, pour ta vérification, c'est vrai qu'il aurait été bien d'intégrer un système d'héritage (surtout dans un site full-ajax) faisant que ce genre de vérification soit effectué à chaque appel ajax.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Spartacusply Voir le message
    Etant donné qu'en théorie (et c'est bien de faire pareil en pratique) une session se clos automatiquement à la fermeture du navigateur (pas avant, ni après), ton problème ne devrait pas se poser.
    Mon problème se pose si l'utilisateur est inactif trop longtemps et que la session expire. C'est d'ailleurs comme ça que ce problème a été révélé.

    Citation Envoyé par Spartacusply Voir le message
    Ceci étant dit, pour ta vérification, c'est vrai qu'il aurait été bien d'intégrer un système d'héritage (surtout dans un site full-ajax) faisant que ce genre de vérification soit effectué à chaque appel ajax.
    Peux-tu m'en dire plus sur ce "système d'héritage" ?


    En gros, faire en sorte que l'ensemble des mes appels ajax recoivent "DECO" lorsque la session a expirer ne me pose pas de problème.
    Mais le truc c'est que j'aimerai éviter d'avoir à aller dans chaque appel ajax pour aller traiter le cas d'une réponse égale à "DECO". Je voudrais savoir s'il y a un moyen de faire un truc plus "global"

  6. #6
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 805
    Points
    4 805
    Billets dans le blog
    6
    Par défaut
    tu peut éviter tout le travail d'un côté mais pas des deux
    à moins que tu ne fasse une fonction qui englobe tes appels ajax, je ne vois pas comment tu peut faire autrement
    Rien, je n'ai plus rien de pertinent à ajouter

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    Au fil de mes recherche, j'ai trouvé la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(document).ajaxSuccess(function( event, xhr, settings ) {
        });
    En mettant ceci sur mon index, il semble que tous les appels ajax qui se déclenchent dessus voient cette fonction executée.
    Je vais donc essayer de faire mon test comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(document).ajaxSuccess(function( event, xhr, settings ) {
            if(xhr.responseText=="DECO") {
                logout();
            }
        });
    Ainsi, comme toutes mes pages appelées en ajax renvoient "DECO" si le test de session à echoué, je devrais pouvoir contrôler tous mes appels ajax sans avoir à aller toucher à tous mes appels ajax.


    Donc pour résumer (pour ceux qui auraient le même soucis) :

    - dans tous mes fichiers php qui sont appelés par ajax, j'insère un include d'un fichier qui vérifie si une de mes variables de session existe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    session_name('mon_appli'); 
    session_start();
    if (!isset($_SESSION["ma_variable"]))
    {
        echo "DECO";
        exit();
    }
     
    ?>
    - comme mon appli ne contient que 2 pages : index et login (navigation ajax), j'insère le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(document).ajaxSuccess(function( event, xhr, settings ) {
            if(xhr.responseText=="DECO") {
                document.location.href = 'login.php';
            }
        });
    Ainsi, dès que l'utilisateur effectue une action, l'appel ajax qu'il déclenche par son action va vérifier la validité de la session et le rediriger vers la page de login si nécessaire.
    Et tout cela sans avoir à coder dans chaque appel ajax ni dans chaque fichier appelé par ajax. On peut donc limiter le travail de codage autant du côté php que du côté javascript

    Je me coucherai moins bête ce soir... ou pas...

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/01/2010, 13h53
  2. Réponses: 4
    Dernier message: 02/12/2009, 20h27
  3. [Prototype] La navigation ajax
    Par Jerome38190 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 17/11/2008, 21h43
  4. Sortie de session à cause d'Ajax
    Par vexal dans le forum WebDev
    Réponses: 1
    Dernier message: 04/08/2008, 08h55
  5. [AJAX] navigation ajax (aide)
    Par speedylol dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/10/2006, 14h39

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