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 :

Re-soumission de formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut Re-soumission de formulaire
    Bonjour,
    Je galère toujours avec un même problème en ce qui concerne un formulaire d'authentification. J'utilise la méthode décrite sur developpez.com (Utiliser une base de données pour sécuriser vos sessions), j'ai arrêté de m'embourber avec un script que j'avais tout seul. Seulement, je rencontre le même problème : quand je me déconnecte, si je clique sur le bouton précédent pour remonter à la page qui a envoyé les login et mot de passe dans des variables $_POST, le navigateur recréé les variables. Je dis recréé car j'efface les $_POST et $_SESSION.
    Dans une précédente discussion, on m'a dit que le navigateur allait recréer les variables (même si je les efface avant). On m'a conseillé de mettre no-cache en en-tête mais c'est inefficace. La session est détruite, les variables de session effacées ainsi que le cookie de session.
    Si quelqu'un a une idée, je ne sais pas quoi faire.
    Merci d'avance.

    PS : Si je n'ai pas été clair, n'hésitez pas à me demander d'autres explications.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Comment fais-tu pour te déconnecter ? l'utilisateur doit cliquer sur un lien ?

    Si c'est le cas, la solution que j'utilise et qui fonctionne, c'est de faire session_unregistrer('nomVariable') sur les variables de ta session qui permettent l'identification

    pour l'exemple, voici comment je procéde et si l'utilisateur se déconnecte de façon "propre" (en cliquant sur le lien déconnexion), il ne peut plus revenir sur des pages sécurisées qu'il a consulté avant sans s'identifier de nouveau.

    Formulaire d'identification :
    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
    32
    <?
      session_start();
      session_unregister('ID');
      session_unregister('LOGIN');
    ?>
     
    <table width="250">
    <form name="identification" method="post" action="php_login.php">
      <tr class="title">
        <td class="center" colspan="2">Identification</td>
      </tr>
      <tr>
        <td class="right">Identifiant :</td>
        <td><input class="text" name="login" type="text" size="10" maxlength="10" /></td>
      </tr>
      <tr>
        <td class="right">Mot de passe :</td>
        <td><input class="text" name="password" type="password" size="10" /></td>
      </tr>
      <tr>
        <td class="center" colspan="2"><input class="button" type="submit" value="S'identifier" /></td>
      </tr>
    <?
      if(isset($_SESSION['message']) && strlen($_SESSION['message']) != 0) {
        echo '<tr>' .
             '<td class="center" colspan="2"><p class="errormessage">' . $_SESSION['message'] . '</p></td>' .
             '</tr>';
        $_SESSION['message'] = '';
      }
    ?>
    </form>
    </table>
    Script d'identification :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?
      session_start();
      include_once('include/php/database.php');
     
    // Récupération des données du formulaire
      $login = trim($_POST['login']);        // login utilisateur (10 caractères AN)
      $password = trim($_POST['password']);  // mot de passe de l'utilisateur (n caractères AN)
     
    // Vérification des données
      $message = '';                         // Initialisation du message retour
      $error = false;
      if(!ereg('^[A-Za-z0-9]{6,10}$', $login)) {
        $message = 'Identifiant/Mot de passe incorrect<br />';
        $error = true;
      }
      if(strlen($password) == 0) {
        $message = 'Identifiant/Mot de passe incorrect<br />';
        $error = true;
      }
      if(!$error) {
        $link = db_connect();
        $query = "select * from user where us_password = '" . sha1($password) . "' and us_login='$login'";
        $result = db_query($query, $link);
        if(db_num_rows($result) != 1) {
          $message = 'Identifiant/Mot de passe incorrect<br />';
          $error = true;
        } else {
          $line = db_fetch_array($result);
          $_SESSION['ID'] = $line['us_id'];
          $_SESSION['LOGIN'] = $line['us_login'];
        }
        db_close($link);
      }
      $_SESSION['message'] = $message;
      if($error) {
        header('Location: index.php');
      } else {
        header('Location: page.php?page=1');
      }
    ?>
    Script de déconnexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
      session_start();
      session_unregister('ID');
      session_unregister('LOGIN');
      header('Location: index.php');
    ?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut
    En fait, les login/pwd ne sont pas enregistrés dans des variables de session.
    L'id session est stocké dans la base associé à l'utilisateur connecté et il y a une vérification à chaque page.
    La logique est la suivante :
    Vérification de l'existence d'une entrée dans la base avec le numéro de session en cours.
    Si oui, on réactualise l'entrée avec un nouveau numéro de session (session_regenerate_id ()) et on affiche à l'écran un message du style : Bonjour, bressan avec un bouton de déconnexion.
    Si non : s'il n'existe pas de $_POST, on affiche le formulaire. Si elles existent, on vérifie dans la base qu'elles sont correctes, on créé une entrée dans la base associant le login et l'id de session puis on affiche le même message avec le bouton de déconnexion.
    Le problème vient donc bien des variables POST qui sont recréées par le navigateur lorsque l'on recharge la page (celle qui a envoyé le formulaire). Le script considère que les $_POST existent et sont correctes (ce qui est le cas) mais le problème est que si l'utilisateur qui fait précédent n'ai pas celui qui a les droits et bien c'est la m...
    Il me faudrait donc un moyen pour éviter la "re-création des $_POST".
    Voilà.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut
    Tu as changé ton post j'avais pas vu ton code.
    Je vais prendre le temps de lire ton code.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Ok, je pense que ma solution ne te conviendra pas, car j'utilise uniquement les variables de session, je n'ai pas de table dans ma base pour gérer les connexions.

    Par contre, en ce qui concerne tes variables login/pwd soumises par ton formulaire d'identification, elles sont persistantes ??? j'ai essayé de reproduire ton problème et pour moi les variables transimses par le formulaire n'existent que pour le script d'identification, ensuite, impossible de le retrouver dans une autre page, même en faisant précedent/suivant dans le navigateur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 124
    Par défaut
    J'ai lu ton script, et il me semble qu'il ait grosso modo identique au mien.
    La logique est la même en tout cas.
    Tu pourrais essayer de de connecter, de naviguer sur une ou deux pages et de faire précédent pour revenir à ta première page pour voir. Normalement, ton navigateur va recharger tes $_POST et te donner une identification correcte.
    Ou alors il y a vraiment quelque chose que je ne fais pas correctement.

    Tu as répondu entre temps, j'efface mes $_POSt mais ils sont recréés. Je ne comprend pas pourquoi.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    C'est justement ce que j'ai fais et il ne m'a pas rechargé mes variables $_POST.

    Le seul moyen que j'ai trouvé pour ne pas avoir à resaisir mes identifiants, c'est de supprimer mes variables de session (ce qui revient à ne plus effectuer de contrôle).

    Je pense que ton problème ne provient pas des variables $_POST mais plutôt du contrôle que tu fais. Comment constates-tu dans ta base que l'utilisateur s'est déconnecté ?

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

Discussions similaires

  1. Soumission de formulaire - insérer dans l'URL
    Par TSalm dans le forum Struts 1
    Réponses: 6
    Dernier message: 06/03/2007, 17h51
  2. soumission de formulaire
    Par Grodan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/01/2007, 16h10
  3. soumission de formulaire : problème ..
    Par questionneuse dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/06/2006, 19h14
  4. Confirm sur une soumission de formulaire
    Par ephemere2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2006, 08h59
  5. double click pour soumission de formulaires
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/11/2005, 12h32

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