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 :

Connexion à une page protégée par mot de passe avec les sessions php.


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut Connexion à une page protégée par mot de passe avec les sessions php.
    J'ai un formulaire simple pour saisir un mot de passe (juste un champs "password" et un bouton d'envoi) pour aller vers une page que nous appellerons secret.php.
    Je veux utiliser les sessions pour éviter l'accès direct aux pages suivante en saisissant leur URL.
    Je ne sais pas faire le test du mot de passe en utilisant les sessions dans le formulaire (ou placer la ligne <form action="secret.php" method="post">?) pour me connecter à la page secret.php s'il est bon et afficher un lien "Déconnexion" pour fermer la session.

    D'avance grand merci.

    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
     
    <?php
    	session_start();
    	$_SESSION['password'] = '';
    ?>
    <!DOCTYPE html>
    <html>
    ...
     
       <p>Veuillez saisir ci-dessous votre code d'entrée :</p>
            <?php
    			if ((isset($_SESSION['password'])) && (!empty($_SESSION['password'])))
    			{
    					// le Mot de passe a été enregistré dans la session, j'affiche la page SECRET.PHP
                                           // ????????
     
    			}
    			else
    			{
    					// pas de login en session : proposer la connexion
    					echo '<a href="connexion.php" title="Accès à la page de connexion">Connexion</a>';
    			}
    		?>
            <form action="secret.php" method="post"> //Lance la page MAIS dans tous les cas ! même si password n'est pas bon.
              <p>
    	      <input type="password" name="mot_de_passe" />
              <input type="submit" value="Valider" />
    	      </p>
            </form>
    PS : mon code est pourri, je le sais ! :-(

    Denis

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La première chose à faire serait de présenter proprement ton code, tu y verrais plus clair.

    Pour une seule page tu n'as pas besoin d'une session :

    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
    if (isset($_POST['password']) && $_POST['password'] == 'tonpassword') {
       // contenu secret
    }
    else {
    	echo '
    	<p>Veuillez saisir ci-dessous votre code d\'entrée :</p>
    	<form action="" method="post">
    		<p>
    			<input type="password" name="mot_de_passe" />
    			<input type="submit" value="Valider" />
    		</p>
    	</form>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je crois que tu cherches à tester ta variable de session trop tôt.

    Moi je ferais les choses comme ça : je créerais 3 pages,
    - la première contient le formulaire pour entrer le mot de passe
    - la deuxième contient le script qui vérifie les données envoyées par le formulaire
    - la troisième n'est accessible que si un mot de passe a été donné, c'est la page secret.php
    Rien ne t'empêche de fusionner la 1re et la 2e page.

    Le principe de base c'est que quand le visiteur arrive sur la page secrète, tu regardes sa session ; s'il n'y a pas le mot de passe ou s'il n'est pas bon, le visiteur n'accède pas à la page.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php // secret.php
    session_start();
    if (!isset($_SESSION['password']) || $_SESSION['password'] !== 'tonpassword') {
       header('Location: ailleurs');
       exit;
    }
    ?>

    Remplace 'ailleurs' bien sûr par l'adresse d'une page valide.

    Tu mets ça au début de toutes les pages de ta partie secrète et la partie est protégée par session. Ce qui n'est pas une protection à 100% infaillible, mais je m'écarte un peu du sujet.

    À présent la question qui se pose c'est : comment initialiser cette variable $_SESSION['password'] ? Ça se passe dans la page qui reçoit les données du formulaire. Occupons-nous d'abord du formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form method="post" action="submit.php">
      ...
    </form>
    Et la page submit.php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (isset($_POST['password'])) {
      $_SESSION['password'] = $_POST['password'];
     
      // tu peux éventuellement rajouter :
      header('location: secret.php');
      exit;
     
      // ou bien :
      echo '<a href="secret.php">Cliquez ici</a>';
    }
    Tu remarques que la page submit ne vérifie pas si le mot de passe est correct. Cette vérification sera faite à chaque fois que le visiteur accèdera à la page secrète, je pense que ça renforce un petit peu la sécurité.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses, je vais essayer de faire avec.

    sabotage dit "Pour une seule page tu n'as pas besoin d'une session :" : Qui te dis que je n'ai qu'une seule page ? non j'aurais un certain nombre de pages, ce qui justifie les sessions.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est toi qui le dit :
    pour aller vers une page
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Bonjour,

    Pour la déconnexion, tu crées un lien style "index.php?action=deco" puis tu supprimes la variable $_SESSION['password']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['action']) && $_GET['action'] === 'deco')
        unset($_SESSION['password']);

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

Discussions similaires

  1. ouvrir automatiquement une macro protégé par mot de passe connu
    Par mapao dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2010, 14h09
  2. Réponses: 1
    Dernier message: 10/11/2008, 16h08
  3. Réponses: 1
    Dernier message: 07/04/2008, 10h51
  4. Réponses: 1
    Dernier message: 22/03/2007, 20h08
  5. Comment ouvrir une base Access protègée par mot de passe
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/09/2006, 13h53

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