besoin d'aide pour la connexion auto

Petit nouveau ! | 3 Messages

14 janv. 2019, 02:08

SAlut a tous, je suis en train de suivre un cours sur le php et en tp on demande de créer un espace membres avec un bouton connexion automatique? hors la je vois pas comment faire, j'ai fait ca pour l'instant les cookie sont bien créer si les conditions sont respectée mais la connexion automatique ne marche pas :(
je vous mets mon code
<?php
 //demmarage de la cession //demmarage de la cession
 // $_SESSION["pseudo"] = $_POST["pseudo"];
 // setcookie('pseudo', $_POST["pseudo"], time() + 365*24*3600, null, null, false, true);
 // setcookie('password', $_POST["password"], time() + 365*24*3600, null, null, false, true);
session_start();
  
  
?>
<!DOCTYPE html>
<html>
    <head>
        <title>inscription</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="style.css" />
    </head>
        <body>
            <form method="post" action="connexion.php">
                <label for="pseudo">Pseudo :</label>
                <input type="text" name="pseudo" id="pseudo" value="<?php if (isset($_COOKIE['pseudo'])) { echo htmlspecialchars($_SESSION['pseudo']); } ?>" placeholder="Votre pseudo ici"autofocus><br>
                <label for="password">Mot de passe :</label>
                <input type="password" name="password" required placeholder="Votre mot de passe"><br>
                <label for ="auto_log">Connexion auto :</label>
                <input type="checkbox" name="auto_log"><br>
                <input type="submit" name="envoyer" value='valider'>
            </form>
  
        <?php
            try // on verifie la connnection a la bdd
                {
                    $mysql = new PDO("mysql:host=localhost;dbname=espace_membres;charset=utf8", "root", "");
                }
            catch (Exception $e)
                {
                    die("Erreur : ".$e->GetMessage());
                }
  
            // Si le membre a cliquer sur le bouton "Envoyer" du formulaire on peut ensuite après la condition ISSET déclarer nos variables ...
            if(isset($_POST['envoyer']))
            {     
            // simplification des variables
                // $pseudo = ($_POST["pseudo"]);
                // $pass = ($_POST["password"]);
                if(isset($_POST["auto_log"])){
                    setcookie('pseudo', $_POST["pseudo"], time() + 365*24*3600, null, null, false, true);
                    setcookie('password', $_POST["password"], time() + 365*24*3600, null, null, false, true);
                }
                //recup pseudo et pass
                $req = $mysql->prepare('SELECT id, password FROM membres WHERE pseudo =? ');
  
                $req->execute(array($_POST["pseudo"]));
  
                $resultat =$req->fetch();
  
                //on compare le pass envoyé
                $pass_correct = password_verify($_POST["password"], $resultat["password"]);
  
                if (!$resultat)
                    {
                        echo 'Erreur sur le mot de passe ou le login';
                    } 
                else
                    {
                        if($pass_correct)
                            {
                                $_SESSION["id"] = $resultat["id"];
                                $_SESSION["pseudo"] = $_POST["pseudo"];
  
                                echo 'bienvenue sur ton espace perso : ' .$_SESSION["pseudo"];
                                header("Location: espace_membre.php");
                                //$req->Closecursos();
                            }
                        else
                        {
                            echo 'mot de passe erroné';
                        }
                    } 
            }
        ?>
          
        </body>
</html>
Voila si vous avez des idées d'ou est mon erreur ca serait cool :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8151 Messages

14 janv. 2019, 11:05

Tu crées des cookies c'est bien, mais maintenant il faut que tu vérifies si ils existent et si c'est le cas, déclencher la connexion le cas échéant.


Par ailleurs, comme c'est un TP ce n'est pas bien grave, mais c'est une mauvaise pratique de stocker dans un cookie le mot de passe en clair.
En général, on met un ID de session unique généré par ton serveur, et si ton serveur le reconnait à la prochaine visite alors il te reconnecte sans redemander les identifiants. Mais c'est plus complexe à faire donc reste pour l'instant sur ta 1ère idée.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

14 janv. 2019, 13:00

tout d'abord, merci de ta réponse, donc je fais un truc comme ca que je place en tout début donc ?
if(isset($_COOKIE["pseudo"]) && !isset($_COOKIE["password"]))

{
    mais je vois pas quoi mettre comme action.
} 
PS: oui pour le pass en clair c'était prévue de le hasher après mais la ca me permettait de vérifier facilement la création et si il changeait en fonction de la session ;)

en revanche l'id unique pas entendu parler dans le cours donc je vois pas trop encore ;)

Mammouth du PHP | 1541 Messages

14 janv. 2019, 14:35

la même action que si tu reçois les info du formulaire.

par contre là tu cherche si il y a un cookie pseudo et pas de cookie password, je pense que tu as un ! de trop
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 3 Messages

14 janv. 2019, 16:31

yes ca marche merci :)

ps ouep pour le ! j'avais pas fait gaffe merci :) en revanche l'id de session unique il faut l'ajouter a la bdd si je comprends bien ?

Mammouth du PHP | 1541 Messages

14 janv. 2019, 17:04

Oui avec une colonne spécific dans ta table user, tu peux chercher dans cette colonne et vérifier qu'il est toujours valide avec une date d'expiration par exemple
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie