Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion automatique et cookie

    17 mai 2018 à 22:03:31

    Bonjour à tous,

    J'ai un blocage avec l'utilisation des cookies en php.

    Je m'explique, j'aimerais réaliser une redirection vers une autre page que la page de connexion basique si le visiteur a déjà des cookies mais dans ma manipulation aucune redirection ne se réalise. 

    Voici pour le code de la page de connexion :

    <?php
    
    session_start();
    
    try
    {
     
    $bdd = new PDO('mysql:host=localhost;dbname=membres;charset=utf8', 'root', 'root');
    }
    catch (Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    
    include_once('cookieconnect.php');
      
    if (isset($_POST['submitconnect']))
    {
    $pseudo = htmlspecialchars($_POST['pseudo']);
    $pass = password_hash($_POST['pass'], PASSWORD_DEFAULT);
    $req = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
    $req->execute(array('pseudo' => $pseudo));
    $resultat = $req->fetch();
     
    // Comparaison du pass envoyé via le formulaire avec la base
    $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
    if (!$resultat)
    {
        $erreur = 'Mauvais identifiant ou mot de passe !';
    }
    else
    {
        if ($isPasswordCorrect) 
        {
            if (isset($_POST['connected'])) 
                {
                setcookie('pseudo',$pseudo, time()+365*24*3600,null,null,false,true);
                setcookie('pass',$pass, time()+365*24*3600,null,null,false,true);
                }
    
            session_start();
            $_SESSION['id'] = $resultat['id'];
            $_SESSION['pseudo'] = $pseudo;
            header("Location: profil.php?id=".$_SESSION['id']);
        }
        else {
            $erreur = 'Mauvais identifiant ou mot de passe !';
        }
    }
     
    }
    ?>
    
    
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="UTF-8">
    	<meta name="theme-color" content="#45c945">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    	<link href="connexion.css" rel="stylesheet" type="text/css">
    
    <title>Titre</title>
    
        
    <meta property="og:title" content="Page d'acceuil"/>
    
    
    </head>
    
        <div class="headerAcceuil">
        	    <div class="paye">
                    <a href="test2.html">Titre</a>
                </div>
        </div>
    <body>
    <div class="content">
    <div class="ici">
    <ol class="chemin">
    <li><span>Vous êtes ici:</span><a href="">Accueil</a></li>
    <li><a href="connexion.php">Connexion</a></li>
    </ol>
    <span></span>
    </div>
    <h4 class="title-element">Connexion <a href="inscription.php" class="account">Pas de compte ? Ca part !</a></h4>
        <div class="group">
    <form method="post" action=""><center>
        <label >PSEUDO</label> 
        <input type="text" name="pseudo" id="pseudo" required />
    <br/>
    <br/>
        <label>MDP</label>
        <input type="password" name="pass" id="pass" required />
    <br/>
    <br/>
        <input type="checkbox" name="connected" id="connected">
        <label for="connected" class="connect" >connexion automatique</label>
    <br/>
    <br/>
    <input type="submit" name="submitconnect" value="Se connecter" id="submitconnect" class="button_submit"/>
    <br/>
    <br/>
    
    <a class="mdpoublie" href="">Mot de passe oublié ?</a>
    <br/>
    <br/>
    
    </center></form>
    <a class="erreur"><center>
        <?php
        if (isset($erreur))
         {
            echo '<font color="red">'.$erreur."</font>";
         }
        ?>
    </center></a>
    </div>
    </div>
    </body>
    

    J'insere un 

    include_once('cookieconnect.php');

     dans ce code :

    <?php
    
    
    if (!isset($_SESSION['id']) AND isset($_COOKIE['pseudo'], $_COOKIE['pass']) AND !empty($_COOKIE['pseudo']) AND !empty($_COOKIE['pass'])) 
    {
    
    $req = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
    $req->execute(array('pseudo' => $_COOKIE['pseudo']));
    $resultat = $req->fetch();
     
    $isPasswordCorrect = password_verify($_COOKIE['pass'], $resultat['pass']);
    if ($resultat)
    {
        if ($isPasswordCorrect) 
        {
    
            $_SESSION['id'] = $resultat['id'];
            $_SESSION['pseudo'] = $_COOKIE['pseudo'];
            header("Location: profil.php?id=".$_SESSION['id']);
    
        }
     }
    }
    ?>

    Si vous pouvez m'aider, je vous en remercie :)

    Bonne journée



    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2018 à 22:42:36

      Bonjour,

      Si tout est fait en même temps, ça ne fonctionnera pas, il faut rafraîchir la page pour que le cookie soit pris en compte.

      • Partager sur Facebook
      • Partager sur Twitter
        18 mai 2018 à 7:53:10

        Bonjour Philodick,

        Faut il que j'insère un Refresh dans la page de code initial?

        La redirection fonctionne une fois connecté, mais le problème c'est que même une fois connecté, si je modifie mon url pour revenir sur cette pas de connexion aucune redirection ne se réalise.

        Merci pour l'aide 

        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2018 à 9:12:36

          Le plus simple à mon avis est de donner la priorité à la session : si elle existe, on se sert des variables de session (et la l'utilisation des variables de session est immédiatement disponible), sinon on regarde si il y a un cookie.
          • Partager sur Facebook
          • Partager sur Twitter
            19 mai 2018 à 8:05:51

            Merci philodick,

            J'ai écrits quleque chose comme ca:

            <?php
            if (isset($_SESSION['id']) AND $_SESSION['pseudo']) 
            {
            	$pseudo = htmlspecialchars($_SESSION['pseudo']);
            	$req = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
            	$req->execute(array('pseudo' => $pseudo));
            	$resultat = $req->fetch();
            	    $_SESSION['id'] = $resultat['id'];
                    $_SESSION['pseudo'] = $pseudo['pseudo'];
                    header("Refresh:0; url=profil.php?id=".$_SESSION['id']);
            }
            
            
            if (!isset($_SESSION['id']) AND isset($_COOKIE['pseudo'], $_COOKIE['pass']) AND !empty($_COOKIE['pseudo']) AND !empty($_COOKIE['pass'])) 
            {
            $pseudocook = htmlspecialchars($_COOKIE['pseudo']);
            $req2 = $bdd->prepare('SELECT id, pass FROM membres WHERE pseudo = :pseudo');
            $req2->execute(array('pseudo' => $pseudocook));
            $resultat = $req2->fetch();
             
            $isPasswordCorrect = password_verify($_COOKIE['pass'], $resultat['pass']);
            if ($resultat)
            {
                if ($isPasswordCorrect) 
                {
            
                    $_SESSION['id'] = $resultat['id'];
                    $_SESSION['pseudo'] = $pseudocook['pseudo'];
                    header("Refresh:3; url=profil.php?id=".$_SESSION['id']);
            
                }
             }
            }
            ?>

            Ca fonctionne pour la session (1 seule fois) mais pas avec les cookies :(

            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2018 à 22:06:27

              Bonsoir,

              J'ai beau cherché, je ne trouve de solution à mon pb. La session permet bien la sauvegarde des données utiles pour la connexion mais qu'une seule fois. Par contre pour les cookies, ça ne fonctionne pas (ils sont bien créés mais je n'arrive pas à les utiliser).

              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2018 à 6:14:06

                Coucou,

                je pense que tu devrais commencer par mettre au "clair" ce que tu souhaites faire. Je veux dire par là, le rédiger en français, en décomposant les différentes étapes.

                Après avoir lu ton code, il y a pas mal d'erreurs de syntaxe/nom de variable/etc... mais surtout, des choses qui n'ont aucun sens. (Je parle de la partie PHP, pour ce qui est du HTML, rien que le fait de voir la balise center me force à te demander de relire le cours concernant cette partie).

                Voilà, commence par faire cela, et on évoluera petit à petit pour que tu comprennes ce que tu fais, et puisses par la suite t'en sortir tout seul quand tu auras de nouveaux soucis. =)

                PS : Comme te l'a signalé @philodick, active les erreurs PDO, va voir le lien de sa signature, ou relis le cours si besoin.

                • Partager sur Facebook
                • Partager sur Twitter
                  26 mai 2018 à 14:58:43

                  Merci pour les conseils, j'ai trouvé ce qu'il clochait avec les messages d'erreur PDO.

                  J'ai donc réussi à régler mon problème concernant la session. Et j'ai trouvé d'où vient mon problème avec les cookies, password_hash crypte différemment le mdp dans le cookie, password_verify ressort donc négatif.

                  Je cherche comment régler ce problème de façon sécurisée, si vous avez des idées, je suis preneur.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Connexion automatique et cookie

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown