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 :

Perte de session changement de page. [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut Perte de session changement de page.
    Bonjour,

    J'ai encore un problème de session: Elle disparaît (wouuhh magiiie).


    Page login:
    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
     
    <?php
      session_start();
      ob_start();
     
    //.....
     
          if(($infos = $requete->fetch()) !== false){
            session_regenerate_id();
            $_SESSION['token'] = md5('sel'.$_SERVER['HTTP_USER_AGENT']);
            $_SESSION['id_utilisateur'] = $infos['id_utilisateur'];
            $_SESSION['email_utilisateur'] = $infos['email_utilisateur'];
            $_SESSION['pseudo_utilisateur'] = $infos['pseudo_utilisateur'];
            //var_dump($_SESSION); <-- affiche correctement la session
            header('location: ./index.php');//on redirige l'utilisateur sur la page d'accueil de l'administration
          }
     
     
    //....
    Page index.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
      include('./header.php');
     
        //le reste de mon code
     
      include('./footer.php');
    ?>
    Page header.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
      session_start();
      ob_start();
       //Vérification de session, on test si l'utilisateur est authentifié
       if(isset($_SESSION['token'])){
        if($_SESSION['token'] != md5('sel'.$_SERVER['HTTP_USER_AGENT'])){
          session_destroy();
          header('location: ./login.php');
        }
      }else{//fin de test session
          header('location: ./login.php');
      }
    //...

    Donc quand je fais un var_dump de la session dans "login.php" c'est ok, ça m'affiche les variables mais quand je redirige sur index.php (qui inclus header.php) et que je fais un var_dump($_SESSION), ça m'affiche : array empty.

    Quelqu'un aurait-il une idée s'il vous plait?

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Tu pourrais expliquer pourquoi tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['token'] = md5('sel'.$_SERVER['HTTP_USER_AGENT']);
    Dans index.php et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if($_SESSION['token'] != md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT']))
    dans login.php ??

    parce que si je perçoit bien l'enchainement des évènements, quand tu arrives sur index.php sans être connecté, tu passe dans le login après avoir détruit la session et tu authentifie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    md5('sel'.$_SERVER['HTTP_USER_AGENT'])
    puis par la suite tu teste le token contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT'])
    ça m'a tout l'air d'un belle boucle infinie... à moins que je ne me trompe

  3. #3
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Parce que je suis un boulet et que j'ai changé mon grain de sel pour éviter d'afficher le "vrai" en public...

    Mais bon. Sinon, dans le code c'est le même ^^.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Dans ton topic et problème auparavant tu avais résolu ton problème en y mettant un point d'arrêt (un exit()) après la redirection (le header).

    Personnellement je le fais systématiquement aussi.
    D'ailleurs, ceci est une fonction qui intègre le exit(), ce qui permet de ne jamais l'oublier (suffit d'exploiter tout le temps la fonction dédiée).

    Aussi, la redirection je le fais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('HTTP/1.1 303 See Other');
    header('Location: '.$url);
    exit();
    Ce qui au bout un un poil différent, car un header('Location: ') renvoir une entête HTTP 302 théoriquement, qui sous entend que c'est une page temporaire.
    Or, ce n'est pas temporaire, c'est systématique que sous cette condition la redirection se fera (un poil nuancé quoi).

  5. #5
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Merci pour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('HTTP/1.1 303 See Other');
    header('Location: '.$url);
    exit();
    A part ça, ça ne règle pas mon problème. J'ai rajouté exit(). J'ai bien mi session_start() avant le ob_start() et ça ne fonctionne quand même pas :/

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    que j'ai changé mon grain de sel pour éviter d'afficher le "vrai" en public
    Si le grain de sel n'est pas le même, théoriquement une redirection s'opèrerait au niveau du header.php qui devrait faire retourner à nouveau vers le login.php.

    Donc au final on ne parvient jamais à afficher cette page index.php
    Du coup je ne vois pas comment as tu fais tes essai pour remarquer ça.

    N'oubli pas de mettre des points d'arrêt avant les header() de redirection, faire afficher certaines données clé pour vérifier ça.
    Puis suffit de simuler une redirection en tapant l'URL après avoir vérifier.

    Dans ton cas, faire afficher l'Id de session avant la redirection puis après (après simulation), voir son contenu est essentiel.
    S'i l'Id de session n'est pas le même (ce qui doit l'être) sera une info importante.

    Bref ... faire ça aussi (point d'arrêts) dans chaque condition pour savoir dans laquelle on entre.
    Je t'assure qu'on parvient assez vite de savoir qu'est ce qui ne va pas.
    Enfin, en général, à part rare cas particuliers.

  7. #7
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Merci RunCodePhp mais le grain de sel est le même. Je le sais. Je l'ai juste changé de mon post sur le forum. Je ne voulais juste pas afficher le vrai.

    Ensuite, je fais bien mes tests: je commente mes headers et je fait un echo. Donc je sais toujours ou va mon script et ce qu'il fait. Je sais donc que ma session est créée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          if(($infos = $requete->fetch()) !== false){
            //on défini les variables de session.
            session_regenerate_id();
            $_SESSION['token'] = md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT']);//pour eviter la fixation de session ou le détournement
            $_SESSION['id_utilisateur'] = $infos['id_utilisateur'];
            $_SESSION['email_utilisateur'] = $infos['email_utilisateur'];
            $_SESSION['pseudo_utilisateur'] = $infos['pseudo_utilisateur'];
            var_dump($_SESSION);
            //header('HTTP/1.1 303 See Other');
            //header('location: ./index.php');//on redirige l'utilisateur sur la page d'accueil de l'administration
            exit();
          }else{...
    array(4) { ["token"]=> string(32) "aafea6962045127b6dcffcb84ce548ba" ["id_utilisateur"]=> string(1) "1" ["email_utilisateur"]=> string(19) "unemail@test.com" ["pseudo_utilisateur"]=> string(4) "Test" }
    Avant la redirection. Je suppose donc que c'est dans le header.php que ça merde. Ou alors une configuration foutrait le bordel? Mais laquelle?

    Le header après ouverture de la session: session vide. Pourquoi? :/

  8. #8
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Le header après ouverture de la session: session vide. Pourquoi? :/
    Dans tes codes avant il y avait un ob_start().
    Du coup, à quel moment les flux ne sont plus stockés en mémoires ? à quel moment ils sont renvoyés en sortis ?

    J'ai idée qu'il y aurait un piège avec ce ob_start().
    Mets un ob_end_flush() juste avant le var_dump, sait on jamais.

    Puis affiche l'ID de session avec echo session_id(), donc juste après le var_dump.
    Ensuite, une fois taper index.php dans la barre d'adresse, il faudrait là aussi afficher cet ID de session, comme dans le header.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    session_start()
     
    echo 'session id : '.session_id().'<br />';
    print_r($_SESSION);
     
    exit();
    Faire ceci le plus tôt possible (pour éviter on ne sais quel autre piège)
    Déjà ça, qu'est ce que tu obtiens ?
    Les Ids de session sont les mêmes ou pas ?

  9. #9
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Les identifiants de session ne sont pas les mêmes!

    login.php: 5310qpec0kgrknhalkl31jn7c4
    index.php: 2t8nqgd7tminc6l511lnnraiv4

    Mais pourquoi il me re-créé une session?! Baaah, ça m'énerve!

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

Discussions similaires

  1. Perte des variable de session au changement de page.
    Par [Xt-6] dans le forum Langage
    Réponses: 11
    Dernier message: 15/01/2009, 21h28
  2. perte de session entre 2 pages suivant le domaine
    Par letitou dans le forum Langage
    Réponses: 3
    Dernier message: 19/06/2007, 10h31
  3. Perte de session total entre page
    Par Okinou dans le forum Langage
    Réponses: 6
    Dernier message: 19/02/2007, 10h08
  4. Perte de session à chaque page, chaque refresh
    Par tio dans le forum Langage
    Réponses: 8
    Dernier message: 22/03/2006, 13h01
  5. Perte de Session d'une page à l'autre
    Par Flam dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2006, 14h34

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