PHP

Cookies pour le bouton "se souvenir de moi"

Non Résolu

Hello @Clouder


J'ai suivi ton super tuto : https://www.youtube.com/watch?v=ZpviDQeljRU&t=2s


Question 1 : Le premier 🍪 comail fonctionne mais pas le second. Aurais-tu une idée du pourquoi stp ? Voici mon code :

<?php
    session_start();

    include('bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD

//ESSAYER DEVOIR LE DETAIL DE CHACUNE DES LIGNES CI-DESSOUS//
    include('function/domaine.php'); //
    include('function/guid.phpp'); //
    include('function/password.php'); //

//$domain=new Domain;
$crypt_password = new Password;

//define("URL", $domain->domain());


  // S'il y a une session alors on ne retourne plus sur cette page  
    if (isset($_SESSION['id'])){
        header('Location: index.php');
        exit;
    }

    // Si la variable "$_Post" contient des informations alors on les traitres

    if(!empty($_POST)){
        extract($_POST);
        //si toutes mes conditions sont ok on exécute
        $valid = true;

        //on se positionne dans le 1er formulaire (ici on en a qu'un
        if (isset($_POST['signin'])){

            $s_mail = htmlentities(strtolower(trim($mail)));
            $s_psw = htmlentities(trim($psw));

            if(empty($s_mail)){ // Vérification qu'il y est bien un mail de renseigne
                $valid = false;
                $er_s_mail = "Il faut saisir un mail s'il vous plaît.";
            }

            if(empty($s_psw)){ // Vérification qu'il y est bien un mot de passe de renseigne
                $valid = false;
                $er_s_mail = "Il faut saisir un mot de passe s'il vous plaît.";
            }

            // On fait une requete pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
            $verif_combi = $DB->query("SELECT *
                FROM utilisateur
                WHERE mail = ? AND password = ?",
             //   array($s_mail, $crypt_password->password($s_password)));
                array($s_mail, $crypt_password->password($s_psw)));
             
                //le fetch recherche uniquement un argument - des qu'on a une ligne cela
                //la combinaison sera unique puisque les mails sont uniques
            $verif_combi = $verif_combi->fetch();

            // Si on a pas de resultat alors c'est qu'il n'y a pas de particulier correspondant au couple mail / mot de passe
            if(!isset($verif_combi['id'])){
                $valid = false;
                //La combinaison mail + mot de passe n'existe pas car on évite de dire que ce soit le mail qui est erronné
                $er_s_mail = "Le mail ou le mot de passe est incorrect.";
            }
            // S'il y a un resultat alors on va charger la SESSION du particulier unique les variables $_SESSION
            if ($valid){
                //Dans notre BDD on a l'id donc on le charge dans la session
                $_SESSION['id'] = $verif_combi['id']; // id du particulier unique pour les requetes futures
                $_SESSION['nom'] = $verif_combi['nom'];
                $_SESSION['prenom'] = $verif_combi['prenom'];
                $_SESSION['mail'] = $verif_combi['mail'];
                $_SESSION['pseudo'] = $verif_combi['pseudo'];

                if(isset($remember)){
                    /*On créer les cookies et on l'encode avec l'urlencode et on utilise un timer pour dire pendant combine de temps*/
                    setcookie("comail", urlencode($_SESSION['mail']), time()+60*60*24*100, "/");
                    /*ici on utilise la focntion */
                    setcookie("copassword", $crypt_password->encrypt($s_psw), time()+60*60*24*100, "/");
                    }else{
                        //on met -1 au niveau du temps, sinon cela veut dire qu'on ne le garde pas
                    setcookie("comail", NULL, -1, "/");
                    setcookie("copassword", NULL, -1, "/");                        
                    }
         //       echo "vous êtes bien connectés";
        header('Location: index.php');
                exit;
            }
        }
    }
?>

<!DOCTYPE html>
<html>
    <head>
        <base href="<?= URL ?>"/>
        <meta charset="utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
        <!--https://getbootstrap.com/docs/5.1/getting-started/introduction/ -->
        <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="css/style.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="css/jquery-ui.theme.min.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="css/jquery-ui.structure.min.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="css/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="css/style.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="css/bluetheme.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="css/darktheme.css" rel="stylesheet" type="text/css"/>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    </head>

    <body>

        <div class="container">
        <h2 style="margin-botton: 15px">Se connecter</h2>

        <div class="ins_cadre">  
        <form method="post">
        
        <div class="container-fluid">                 
            <label><b>Mail</b></label>
            <!--si on a bien qqchose dans les cookies alors cela affiche mon mail dans urldecode -->
            <input type="email" placeholder="Entrez votre mail" name="mail" value="<?php if(isset($s_mail) && !isset($_COOKIE['comail'])){echo $s_mail; }
            if(isset($_COOKIE['comail'])){ echo urldecode($_COOKIE['comail']); }?>" required>

            <?php if(isset($er_s_mail)){echo "<div>$er_s_mail</div>"; } ?>

            <label><b>Mot de passe</b></label>
            <input type="password" placeholder="Entrez votre mot de passe" name="psw" value="<?php if(isset($_COOKIE['copassword'])){ echo $crypt_password->decrypt($_COOKIE['copassword']); }?>" required>

            <div style="text-align: center">
                <button type="submit" name="signin" class="logbtn">Connexion</button>
            </div>

            <label class="switch">
                <input type="checkbox" name="remember" <?php if(isset($_COOKIE['copassword']) && ($_COOKIE['copassword']!="")) {echo "checked";}?>>
                <div class="slider round"></div>
                <span style="position: absolute; left: 70px; top:7px; width:100px">Se souvenir</span>
            </label></div>

            <div style="padding: 10px;position:  relative"><span style="position:  absolute; right:  10px;top: 0"><a href="">Mot de passe oublié ?</a></span></div>
                   
</form>
</div></div>



    <!-- premier lien de https://developers.google.com/speed/libraries -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <!-- <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>-->
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    <script src="<?= URL ?>js/bootstrap.min.js"></script>
    <script type="text/javascript">

function myFunction(x) {
        x.classList.toggle("change");
}
</script>
     <!-- Footer -->   
    </body>
</html>


Voici la fonction password :


<?php
    
    /**
    * Crypt password
    */
    class Password {
        
        public function __construct(){
            
        }
        /*il s'agit ici de la fonction crypt */
        /*vérifier ici c'est la clé est bien différente de celle de l'inscription https://www.youtube.com/watch?v=ZpviDQeljRU&t=2s et regarder la vidéo du formulaire d'inscription*/
        /*la remodifier lorsque l'on met en ligne*/        
        public function password($p_chaine){            
            $p_chaine = crypt($p_chaine, "$6$rounds=5000$vTZET");
            return $p_chaine;
        }

        //public function age($date_naissance){
        //    $arr1 = explode('-', $date_naissance);
        //    $arr2 = explode('-', date('Y-m-d'));
                
        //    if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[2] <= $arr2[2])))
        //    return $arr2[0] - $arr1[0];
        
        //    return $arr2[0] - $arr1[0] - 1;
        //}

            function encrypt($data) {            
            $key = "az@tyu78"; //clé de 8 caractères max - ok je l'ai modifié
            $data = serialize($data); //
            $td = mcrypt_module_open(MCRYPT_DES,"",MCRYPT_MODE_ECB,""); //
            $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            mcrypt_generic_init($td,$key,$iv);
            $data = mbase64_encode(mcrypt_generic($td, '!'.$data));
            mcrypt_generic_deinit($td);
            return $data;
        }
            
        function decrypt($data) {            
            $key = "az@tyu78"; //clé de 8 caractères max - ok je l'ai modifié
            $td = mcrypt_module_open(MCRYPT_DES,"",MCRYPT_MODE_ECB,""); //
            $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
            mcrypt_generic_init($td,$key,$iv);
            $data = mdecrypt_generic($td, base64_decode($data));
            mcrypt_generic_deinit($td);

            if(substr($data,0,1) != "!")
                return false;

            $data = substr($data,1,strlen($data)-1);
            return unserialize($data);
        }


           
        
    }
?>


Aurais-tu une idée stp ?


Question 2 : La chaîne de code "$6$rounds=...." dans la focntion apssword doit-elle bien être la même que dans celle de l'inscription ou faut-il la changer stp ?


  public function password($p_chaine){            
            $p_chaine = crypt($p_chaine, "$6$rounds=5000$CP&^b6g9GSScb$eR6T^EZwYZM2kWP^bkDyk&C3fBfo$eeqpi3cCntg#bbsA&yhyiSPjM$e!p2mVUZaw3VTnc2BimQZfh28YdfGGu$H!NKwQZSdH%7Ye5");
            return $p_chaine;

Un grand merci pour ton aide 🍺

476 vues
03 janvier 2022 à 18:42 (Édité)
Cette pub permet au site de vivre ...

Commentaire

Cette pub permet au site de vivre ...