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

PHP & Base de données Discussion :

Gestion des sessions


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut Gestion des sessions
    Bonjour,

    J'ai un soucis avec une session php. Je suis en train de faire un espace sécurisé pour un site. Il y a une page de connexion et ensuite on arrive sur une page sécurisé qui elle-même permet d'accéder à d'autres pages sécurisées.

    Ma page de connexion fonctionne. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <?php
        if (isset($_POST['login']) == "toto" AND $_POST['mot_de_passe'] ==  "toto") 
        {
        session_start();
        $_SESSION['auth'] = "ok";
        ?>
    Ma page s'affiche bien et j'ai bien la variable $_SESSION['auth'] qui est à 'ok' quand je la print. J'ai un lien sur cette page qui me renvoie à une autre page que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
        session_start();
        if (empty($_SESSION['auth']))
        {header ('Location:http://www.monsite.org');exit();}
    ?>
    <p>Ma page 2</p>
    Et là, à chaque fois j'ai la redirection alors que ma variable n'est pas vide.

    Je sèche...

    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonsoir

    Copie/colle le code ci-dessous dans un bête script php (test.php) et exécute-le. Que se passe-t-il ?

    Ben, dans 100% des cas, tu seras dans la partie "EN DEHORS" et ... c'est logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $arr['login'] = 'toto';
    $arr['mot_de_passe'] = 'toto';
     
    if (isset($arr['login']) == "toto" AND $arr['mot_de_passe'] ==  "toto") 
    {
        echo 'DANS LE IF';
    } else {
        echo 'EN DEHORS';
    }
    Décortique ton test... Que retourne isset($_POST['login']) ? Cela retourne un booléen (True ou False). Tu compares donc True avec "toto" et ... ben non, ce n'est pas la même chose.

    Voici pourquoi cela ne fonctionnera jamais de cette manière.

    Je suppose que tu programmes en PHP7 aussi voici une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $arr['login'] = 'toto';
    $arr['mot_de_passe'] = 'toto';
     
    if ( (($arr['login'] ?? '') == 'toto') && (($arr['mot_de_passe'] ?? '') ==  'toto') )
    {
        echo 'DANS LE IF';
    } else {
        echo 'EN DEHORS';
    }
    Bonne soirée.

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    Merci Cavo pour ta réponse. Tu m'as aiguillé vers une résolution :

    Il manque une P*** de parenthèse à mon code. Je comprends pourquoi tu croyais que je comparais le résultat du isset. Y'a un moment, quand on n'a plus les yeux en face des trous, il vaut mieux aller au lit.

    Sinon, je suis bien dans le IF avec tes 2 codes. Pas de différence chez-moi ça fonctionne.

    Le problème s'est déplacé : Parse error: syntax error, unexpected '{' alors que cette fois j'ai contrôlé toutes mes parenthèses et autres... Bon, je vais bien finir par trouver le truc.

    Edit : Mystère sur cette erreur. J'ai créé un nouveau fichier avec le même code et ça fonctionne.

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    Ça avance un peu, mais j'ai toujours un problème.

    Voici le code de ma page de log :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      <div class="w3-card-4 w3-margin w3-white">
        <div class="w3-container">
          <p>Veuillez entrer identifiant et mot de passe ci-dessous :</p>
            <form action="admin.php" method="post">
                <p>Identifiant : <input type="text" name="login" /></p><br>
                <p>Mod de passe : <input type="password" name="mot_de_passe" /></p>
                <p><div class="w3-center"><input type="submit" value="Valider" /></div></p>
            </form>
            <br>
        </div>
      </div>

    Elle m'envoie bien sur ma page d'administration. La page sommaire.php est bien intégrée si les codes sont bons, sinon, message d'info pour codes erronés. Voici le code de ma pages d'administration (Merci Cavo789 pour le debug) :
    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
     
    if ( (($_POST['login'] ?? '') == 'toto') && (($_POST['mot_de_passe'] ?? '') ==  'toto') )
    {
        session_start();
        $_SESSION['auth'] = "ok";
        require 'sommaire.php';
     
    } else {
     
        ?> 
        <div class="w3-card-4 w3-margin w3-white">
        <div class="w3-container w3-center">
            <h1>Vous n'avez pas saisi les bons codes.</h1>
        </div>
        </div>
    <?php
    }
    ?>
    Ma page sommaire.php est du code HTML protégé par l'entête ci-dessous afin qu'on ne puisse pas y accéder en saisissant son adresse dans le navigateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        session_start();
        if (empty($_SESSION['auth']))
        {
            header ('Location:http://www.monsite.org');
            exit();
        }
    ?>
    Cette page sommaire contient des liens vers d'autres pages qui sont toutes protégées par le même en-tête. Mais ces pages ne s'affichent pas, je suis redirigé vers la Location.

    Quelqu'un a une idée du problème ?
    Merci.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Bonjour,

    Après la ligne 2, ajoute var_dump($_SESSION['auth'];

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    Avec var_dump je vois que ma variable et ok dans le fichier sommaire.php mais elle est vide (NULL) dans ma deuxième page.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Contrôle l'ensemble de ton code en ajoutant des var_dump partout où tu as un $_SESSION['auth'], inhibe provisoirement les header et les exit pour voir ce qui se passe.

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    J'ai contrôlé, tout fonctionne bien dans ma page d'admin et dans la page sommaire. Le problème apparaît lorsque j'appelle la page2 depuis sommaire. C'est uniquement dans la page 2 que ma variable de session est à NULL.

    Est-ce que ça a une importance que sommaire soit inclue dans admin lorsqu'elle appelle la page2 ?

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    J'ai identifié le problème. Je vais essayer de résumer clairement la situation.
    J'ai une page maître : admin.php
    Dans cette page maître, j'ai un 'require sommaire.php'.

    Tout ça fonctionne très bien. Le contrôle de l'authentification fonctionne.

    Dans la page sommaire.php, j'ai des liens vers d'autres pages. Ce sont ces liens qui ne fonctionnent pas. C'est lorsque j'appelle ces pages que la variable de session est NULL.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 35
    Par défaut
    Salut,
    Le code des autres pages mentionnées contient-il aussi un session_start()? En cas contraire, le problème pourrait venir de là.

  11. #11
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    Toutes contiennent un session_start : admin.php qui passe la variable de session à ok, sommaire.php et page2.php qui contrôlent que la variable de session existe.

    Remarque : j'ai essayé d'enlever le session_start de pa page sommaire.php mais ça ne change rien.

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 11
    Par défaut
    Bon, ben c'était un truc à la C** : IL NE FAUT PAS D'ESPACE avant session_start.
    Le pire, c'est que je le savais... et qu'il y en avait un !

    Merci à vous d'avoir quand même pris le temps de me répondre et désolé pour le dérangement.

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

Discussions similaires

  1. Gestion des sessions avec applet
    Par Mister Nono dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/08/2006, 18h27
  2. [JSP] Gestion des sessions
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 28/06/2006, 10h44
  3. [Struts][JSP]gestion des session en JSP
    Par zola dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/04/2006, 16h23
  4. gestion des sessions
    Par jeff_! dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 22h09
  5. [tomcat] gestion des sessions
    Par sebos63 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/10/2004, 14h25

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