Page 1 sur 1

Générer un nouveau mot de passe

Posté : 09 avr. 2007, 18:31
par dunbar
Bonjour,

J'ai créer un espace membre, et je ne sais vraiment pas quelle piste prendre pour permettre aux ultilisateurs qui aurait perdu leur mot de passe d'en générer un nv ??
Qui pourrais me mettre sur une piste?

D'avance merci :wink:

Posté : 10 avr. 2007, 00:48
par MainMa
Exemple du code très très basique utilisé sur l'un de mes sites :
$rand_pass = '';
$length = rand(9, 16);
for ($i = 0; $i < $length; $i++)
{
  $range = rand(0, 55);
  if ($range < 23)
  {
    $rand_pass .= chr(rand(65, 90));
  }
  else
  {
    if ($range < 46)
    {
      $rand_pass .= chr(rand(97, 122));
    }
    else
    {
      $rand_pass .= chr(rand(48, 57));
    }
  }
}
Génère le mot de passe composé des lettres et des chiffres. La longueur du mot de passe varie aléatoirement de 9 à 16 caractères.

Posté : 10 avr. 2007, 10:42
par charabia
Pour compléter MainMa, la personne ayant perdu son mot de passe doit par exemple rentrer son mail dans un formulaire.

Ce formulaire aura pour action de chercher le mail dans la base et de générer un nouveau code et remplacer l'ancien (avec le code de MainMa par exemple). Là tu devras bien sûr envoyer un mail à cette personne avec son nouvel accès.

Tu devras donner ensuite lui donner la possibilité de changer le mot de passe en question parce que retenir un mot de passe aléatoire n'est pas une masse à faire lol

Posté : 21 avr. 2007, 23:42
par dunbar
Bonsoir,
Alor voici mon code après quelques recherche et de café :wink:
<?php

include("connect/fc-phpconnect_tvc.php");


 /*generation du nv pass.*/
 function gen_reg_key()
   {

  $key = "";   /*on initialise la variable $key à "vide" */
  $max_length_reg_key = 10;   /*on définit la taille de la chaine (10 caractères ca suffit ;))*/

  /*on définit le type de caractères ascii de la chaine */
                 $chars = array( "a","b","c","d","e","f","g","h","i","j","k","l",
                                 "m","n","o","p","q","r","s","t","u","v","w","x",
                                 "y","z","1","2","3","4","5","6","7","8","9","0");


  $count = count($chars) - 1;  /*on comptabilise le nombre total de caractères possibles (36  :-) pour l'alphabet) */
  srand((double)microtime()*1000000);  /*on initialise la fonction rand pour le tirage aléatoire*/
  for($i = 0; $i < $max_length_reg_key; $i++) $key .= $chars[rand(0, $count)]; /*on tire aléatoirement les $max_length_reg_key carac de la chaine*/
  return($key);  /*on renvois la clé générée */
  }
       /*Fin de le génération de clé*/

 $loginnewpass = $_POST['passeperdu'];
 if (isset($loginnewpass)) {

                $sql = mysql_query ("SELECT
                *
                FROM
                membre
                WHERE
                login='".$loginnewpass."'") ;

                $rep = mysql_fetch_object($sql) ;
                if ($rep->id == "" || $rep->pass2!="") { //Si le login n'existe pas
                if ($rep->id == "")

                 {
                 echo "<BR><center>Aucun membre avec ce login !<BR><BR><a href=perdu.php>Retour</a><BR><BR>" ;
                 }

                  }else{ //SI LE login EXISTE DANS LA BDD

 $nom           = $rep->name ;
 $to            = '[email protected]';
 $new_pass      = gen_reg_key();
 $destinataire  = $loginnewpass ;
 $email_dest    = $rep->email ;
 $new_pass_md5  = md5($new_pass);


                $sql = "UPDATE
                membre
                SET
                pass_md5='".$new_pass_md5."'
                WHERE
                login='".$loginnewpass."'" ;
                if(false ===($result = mysql_query($sql))) {
                die("Erreur MySQL :<br />" . $sql . "<br />" . "Impossible de sauvegarder la/les modification/s");
                }

                header('location:index.php');


     function MySendMail($to='',$objet='',$contenu=''){
     $header   ='From: [email protected]'."\n".
                'Bcc: [email protected]'."\n".
                'Content-type: text/plain; charset=iso-8859-1'."\n".
                'Content-transfer-encoding: base64'."\n".
                'X-Priority: 3'."\n".
                'X-MSMail-Priority: Normal'."\n".
                'X-Unsent: 1'."\n".
                'X-Originating-IP: [0.0.0.0]'."\n";

     return @mail($to,$objet,@chunk_split(@base64_encode($contenu)),$header);
}




    $objet    = 'Votre nouveau mot de passe sur Cabling';
    $contenu  = 'Bonjour '.$nom."\n\n".
                'Vous recevez cet e-mail parce que vous (ou quelqu\'un qui prétend être vous) '.
                'avez demandé à ce qu\'un nouveau mot de passe vous soit envoyé pour votre '.
                'compte.'.
                'Si vous continuez à le recevoir, veuillez contacter l\'administrateur. '.
                'Vous êtes priés de conserver cet e-mail dans vos archives. Voici les '.
                'informations concernant votre compte : '."\n\n".
                '++++++++++++++++++++++++++++++++++++++++++++++++++++++'."\n".
                'Votre pseudo: '.$loginnewpass."\n".
                'Votre nouveau mot de passe: '.$new_pass."\n".
                '++++++++++++++++++++++++++++++++++++++++++++++++++++++'."\n\n".
                'Si vous rencontrez des difficultés, veuillez contacter l\'administrateur.'."\n\n".
                'Vous pouvez vous rendre dans votre profil pour modifier le mot de passe.'."\n\n".
                'Cordialement laurent Gillet.'."\n";

	            return MySendMail($email_dest,$objet,$contenu);


                     }



 } else {
  }

 ?>
<html>

<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<body background="img/grd-4px.gif">

<form method="post" action="perdu.php">
<fieldset style="width: 259; height: 43"><legend>Demande d'un nouveau mot de
passe.</legend>
<label for="pseudo"><font size="2" color="#000000">Votre login svp:</font></label>
<input name="passeperdu" type ="text"id="passeperdu"/><p align="center">
<input type="submit" value="Connexion" style="border: 1px solid #6699CC; padding-left: 4px; padding-right: 4px;
 padding-top: 1px; padding-bottom: 1px; background-image: url('style/imgs/fd_bt_1.gif')"/><br />
</p>
</fieldset>
<br />
&nbsp;</form>
</html>
<?php
?>
J'ai quand même un petit soucis il m'envoie deux fois les mail ?
Et seconde question comment faire pour une copie cachée parca que j'ai essayé avec BCc et Bcc mais cela ne donne rien ????
Et je suis preneur de toute optimisation

D'avance merci