Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment faire une session avec login et mot de passe choisi?

Sujet résolu
    3 décembre 2008 à 15:17:22

    Voilà, je voudrais savoir comment faire un système de sessions dont le login et le mot de passe auraient étés choisi par l'utilisateur lui-même?
    Faut-il pour cela utiliser les base de données de données SQL?
    Et si oui comment faire pour que ce soit le logins et le mot de passe de la personne qui soient permis et pas d'autres? (Je voudrais savoir par là si en mettant un login et un mot de passe quelconque, un hacker arriverait à se connecter sur l'espace membre)
    Enfin, dernière question, (Je sais que c'est beaucoup de question mais il vaut mieux les poser avant plutôt qu'après quand on a écrit le code), comment faire pour sécuriser le mot et le login si on le met sur la BDD?
    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2008 à 11:13:30

      Bonjour,
      Oui, a mon avis tu es obligé de stocker les login et mot de passe dans une base de données.
      Pour la sécurité, il faut crypter le mot de passe dans la base de données en utilisant la fonction suivante :
      crypt($_POST['pass']);
      Regarde le tuto de Matéo : http://www.siteduzero.com/tutoriel-3-1 [...] htaccess.html
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2008 à 11:59:09

        Bonjour Gustoiles,

        Pour répondre à ta question, il faudrait que tu gères ton système via un principe d'inscription.

        Dans un premier temps, une page inscription.php contenant des <form><input></form> tels que Nom,Prénom,Email,Password, bref toutes les informations qui te seront nécessaires dans l'espace membre.

        L'idéal est d'utiliser la fonction md5 ou sha1 pour encrypter ton mot de passe.

        Une fois inscrit, ton membre n'a plus qu'à s'identifier... tu peux gérer tes membres grâce à un système de grade pour qu'ils aient accès selon leur niveau à des pages différentes.

        Good luck !
        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2008 à 14:07:34

          Merci à vous deux pour vos réponse sur le cryptage des mot de passe.
          Mais, disons que je fabrique un formulaire avec le pseudo et le mot de passe qui renverraient dans une base de donnée avec les informations sur le pseudos, le mot de passe et l'id bien sûr.
          Comment peut-on être sûr que pour se connecter l'utilisateur devra mettre son login avec le mot de passe correspondant et pas un autre ?
          Quel est le code php qui permet cela ?
          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2008 à 20:15:19

            En gros voila comment faire:
            1. La personne tape son login et son mot de passe dans ton formulaire
            2. Tu vérifie dans ta base de données qu'un enregistrement comporte bien ce login et ce mot de passe. Par exemple avec la fonction count. (Au passage pense a faire en sorte que personne ne puissent avoir le même login)
            3. Si la fonction count retourne un enregistrement, tu ouvre la session.
            • Partager sur Facebook
            • Partager sur Twitter
              5 décembre 2008 à 13:28:13

              J'avais compris qu'il fallait vérifier dans la bande de donnée s'il y avait bien le pseudo et le mot de passe dans la base de donnée. Mais j'aimerais savoir si par exemple: un utilisateur qui a le pseudo Gustoiles et qui serais en id 2 et que par un hasard extraordinaire il ferait le mot de passe du gars en id 5, est-ce qu'il arriverait à se connecter quand même à sa session ? Et si oui, n'y a-t-il pas moyen d'empêcher ça?

              PS: Merci Olivier615 de me prévenir contre les pseudos qui risquent d'être identique. Je suppose qu'il faut essayer d'empêcher ça dès l'inscription.
              • Partager sur Facebook
              • Partager sur Twitter
                5 décembre 2008 à 16:06:01

                Si deux personnes ont le même mot de passe ça ne pose aucun problème.
                Puisque pour verifier qu'un utilisateur entre ses bon login tu va :
                1 récupérer le pseudo et le mot de passe entré dans le formulaire
                2 chercher dans ta base de donnée la ligne correspondante au pseudo entré
                3 comparer le mot de passe rentré avec le mot de passe lié au pseudo dans ta base de donnée
                4 si le mot de passe est le meme alors tu envoie vers l'espace membre
                5 sinon tu redirige vers l'interface de connexion.

                Voila :)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 décembre 2008 à 18:15:48

                  Voila j'essaie petit à petit le code et j'ai fait déjà l'inscription.

                  Citation : Code PHP

                  <?php
                  if(isset($_POST['pseudo'])and isset($_POST['motDePasse']))
                  {
                  if(($_POST['pseudo']) !=null and ($_POST['motDePasse'] !=null))
                  {
                  mysql_connect("localhost","root","");
                  mysql_select_db("essai");
                  $pseudo=mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
                  $motDePasse=mysql_real_escape_string(htmlspecialchars($_POST['motDePasse']));
                  mysql_query("insert into connexion values(' ', '$pseudo', '$motDePasse')");
                  mysql_close();
                  }
                  }

                  ?>


                  Voici le code PHP mais il est incomplet et surtout il laisse passer les doublons.
                  Je voudrais savoir comment faire pour qu'il ne puisse pas y avoir de doublons dans mes pseudos dans ma base de données.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 décembre 2008 à 19:51:04

                    <?php $pseudo = $_POST['pseudo'];
                    $password = $_POST['password'];//on recupere
                    $reponse = mysql_query("SELECT * FROM membres WHERE pseudo=  '$pseudo'   AND  password= '$password' ");
                    $num_rows = mysql_num_rows($reponse);
                    
                    /*Dans ce debut de code je recupere les données par post
                    **J'utilise des peties fonctions
                    **et je recupere le champ dans la bdd ou il ya le pseudo que l'utilisateur
                    */
                    if ($num_rows == 1 ) //on verifie si c'est bien les bon identifiants
                    {
                      $timestamp_expire = time() + 365*24*3600; // Le cookie expirera dans un an
                        setcookie('pseudo', $pseudo, $timestamp_expire); // On écrit un cookie
                       setcookie('password', $password, $timestamp_expire); // On écrit un autre cookie...
                       setcookie('ip',$_SERVER['REMOTE_ADDR'] ) ; 
                      echo 'Vous etes maintenant connecté en tant que '.$pseudo;  
                    } else { echo 'Mauvais identifiant '; }
                    ?>
                    


                    Un petit code , je sais pas si ca te conviendra mais en tout cas c'est ce que j'utilise ( Et comme je suis un flemmard je changerais pas :p )
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 décembre 2008 à 14:14:42

                      Désolé Basket[ben] j'ai essayé ton code mais ça n'as pas marché. J'ai quand même trouvé la solution à mon problème.

                      Citation : Code PHP


                      <?php
                      if(isset($_POST['pseudo'])and isset($_POST['motDePasse']))
                      {
                      if(($_POST['pseudo']) !=null and ($_POST['motDePasse'] !=null))
                      {
                      mysql_connect("localhost","root","");
                      mysql_select_db("essai");
                      $pseudo=mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
                      $motDePasse=mysql_real_escape_string(htmlspecialchars($_POST['motDePasse']));
                      $retour=mysql_query("select pseudo from connexion where pseudo= '$pseudo'");
                      $donnees=mysql_fetch_array($retour);
                      if($donnees['pseudo']==$pseudo)
                      {
                      echo $pseudo .' existe déjà <br/> Choisissez un autre pseudo'
                      }
                      else
                      {

                      mysql_query("insert into connexion values(' ', '$pseudo', '$motDePasse')");
                      }
                      mysql_close();
                      }
                      }

                      ?>


                      J'ai essayé et ça marche mais maintenant je voudrais savoir comment on fait pour par exemple envoyer un mail avec un lien de confirmation?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 décembre 2008 à 14:42:36

                        Ah c'est un code d'inscription que tu fais ? :o
                        J'avais pas tout compris >.< (Oublie pas de mettre le topic en résolu ;) )
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 décembre 2008 à 11:45:27

                          Oui, tu as raison, je vais mettre résolu. Même si je ne demandais pas que l'inscription mais aussi comment se connecter et reprendre les mot de passe dans la base de données.
                          Merci à tous pour m'avoir aider à trouver la réponse.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 décembre 2008 à 13:35:30

                            Pour avoir un système d'activation de compte par mail, il faut plusieurs choses: rajouter au moins deux champs dans ta table membres, créer une nouvelle page qui envoie le mail (ce n'est pas obligatoire, mais ça allège le code de l'inscription), et créer une nouvelle page qui activera le compte.

                            La première étape donc, se joue à l'inscription. Il te faut deux nouveaux champs (trois si tu n'as pas encore de champ où stocker l'adresse mail) donc, respectivement "code_activation" et "membre_actif" (tu n'es bien sur pas obligé de prendre ces noms de champs, j'ai mis ceux ci pour qu'ils soient plus clairs pour toi).
                            Voici à quoi pourrait ressembler ta table "membres":
                            Une table membres
                            Donc, revenons à ton code d'inscription. Tu as tes champs, qu'il va nous falloir remplir. Tu as déjà rempli id, pseudo, password. Il va donc nous manquer mail, code (ou code_activation, selon ton choix), et actif (ou membre_actif, toujours selon ton choix). La première chose va être la gestion de l'adresse mail. Il te faut rajouter un input dans ton formulaire pour le mail. Ensuite, il va falloir que tu vérifies si le mail est valide ou non.
                            Si le mail est valide (nous sommes donc dans une condition if), tu crées un nombre unique que tu vas enregistrer en même temps que le reste des informations (tu auras donc mysql_query("insert into connexion values(' ', '$pseudo', '$motDePasse', $code_activation)");). Pour créer ce nombre unique, tu as plusieurs méthodes: la première est de prendre le timestamp actuel (au moment de l'enregistrement dans la BDD) (mais si deux personnes s'inscrivent en même temps, ça peut poser problème), la deuxième est de créer un nombre aléatoire grâce à la fonction rand(). Enfin ce ne sont que deux méthodes parmi tant d'autres; sachant que tu peux allier les deux: faire un nombre aléatoire à partir du timestamp, ou prendre le timestamp et y ajouter à la suite un nombre aléatoire (là tu est quasiment sur d'avoir un code unique). Bien sur, attention à bien choisir ton TYPE de champs dans ta BDD avec un nombre suffisamment grand pour contenir ce code.
                            Pour le champ "membre_actif", on va y mettre la valeur 0, nous allons voir pourquoi par la suite.
                            Tu obtiens donc une requête SQL à peu près comme ceci: mysql_query("insert into connexion values(' ', '$pseudo', '$motDePasse', $code_activation, '0')");
                            Là,le membre est enregistré. Mais son compte n'est pas actif.


                            Pour activer le compte, il faut reprendre le script d'inscription et y rajouter ceci, juste après ta requête SQL d'enregistrement des données par exemple: include('envoi_mail.php'). Bien sur, tu appelles cette page comme tu veux et tu la places où tu veux. Tu crées donc cette page, qui aura pour but d'envoyer un mail au membre inscrit ((tout est expliqué dans le tuto). Dans ce mail, tu peux donner au membre son login, son mot de passe, et surtout, tu dois y mettre un lien vers ton site. Ce lien sera construit comme ceci: http://monsite.fr/activation_compte.php?code=<?php echo $code_activation;?>. $code_activation étant bien entendu le nombre unique généré plus tôt. Ainsi, le membre recevra ses informations plus un lien unique qui lui est propre (puisque le GET['code'] fait référence au nombre unique créé pour le membre et enregistré dans la BDD).

                            Maintenant, il ne te reste plus qu'à créer une nouvelle page activation_compte.php. Dans l'URL de cette page, quand on cliquera sur le lien se trouvant dans le mail, il y aura un GET qui vaudra le nombre unique créé. Il ne reste alors plus qu'à aller dans la BDD, à chercher l'entrée code qui correspond au $_GET['code'], et à faire une mise à jour de membre_actif = 0 en membre_actif = 1.

                            Voila, tu as les points importants pour créer une validation par mail. Cependant, il manque la connexion; et on y vient.

                            D'abord, il te faut une page connexion.php. Dans cette page, il te faut un formulaire avec deux champs: un de type text (pour le pseudo) et un autre de type password (pour le password; si si, je vous jure ^^ ).
                            Tu récupères les deux variables $_POST. Tu te connectes à ta BDD. Et là, il suffit juste d'aller chercher les infos du membre dont le pseudo vient d'être entré: mysql_query('SELECT * FROM membres WHERE pseudo = $pseudo AND membre_actif = 1');
                            Voila, on vient de sélectionner toutes les données du pseudo si le compte en question a été activé (membre_actif = 1; s'il vaut 0, impossible de se connecter). A partir de là, une simple condition suffit: si le password rentré ($_POST['password']) est égal au password du membre qu'on vient de sélectionner dans la BDD ($donnees['password']), c'est qu'il s'agit du bon password, que c'est le bon membre, et on peut donc le connecter. Pour ce faire, il suffit juste de créer les SESSION que tu désires, comme par exemple $_SESSION['pseudo'] qui vaudra le pseudo du membre connecté, $_SESSION['id'] qui vaudra son id (ça peut être utile) etc... Par exemple tu peux créer une $_SESSION['rang'] (il faut ajouter un champ "rang" dans ta BDD) qui vaudra un chiffre ( si $donnees['rang'] vaut 4, $_SESSION['rang'] vaut 4); et là, tu peux afficher différentes choses en fonction du rang. Imaginons que les simples membres aient une $_SESSION['rang'] égale à 1 alors que les admin eux ont une $_SESSION['rang'] égale à 6, tu pourras faire if ($_SESSION['rang'] !=6) echo 'Vous n\'êtes pas admin!!!'; . Tu peux bien sur faire mieux en affichant un menu propre aux admins, aux modos, bref, à ce que tu veux.



                            Je pense avoir fait le tour de ce qu'il te faut savoir pour réaliser un espace membre très simple avec validation par mail + connexion. Après, libre à toi de rajouter, modifier, bref, de faire ce que tu veux. Je ne sais pas si ce que j'ai écrit est très clair, si ça ne l'est pas, n'hésite pas à demander.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 décembre 2008 à 15:39:09

                              Je vais essayer ton truc mais avant je voudrais savoir un truc: je suis en train de tester tous sur mon ordinateur mais d'après ce que j'ai pu comprendre, si j'envoie un mail avec PHP maintenant, ça ne marchera pas.
                              Comment suis-je sensé faire alors ? N'y a-t-il pas quelques part sur le forum un sujet ou un tutos qui traite de ça?
                              Merci d'avance.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 décembre 2008 à 16:49:06

                                Hé bien la solution est que tu fasses un essai sur le web. En effet, à priori tu ne peux pas envoyer de mail à partir de ton ordinateur. Je dis bien à priori parce que je n'en suis pas sur (même si je n'ai jamais réussi) et que je ne suis pas un expert, loin de là.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 décembre 2008 à 18:24:38

                                  :( Je vois.
                                  Ca va me compliquer la tâche surtout parce que je ne comptais pas envoyer de site sur le serveur pour l'instant.
                                  Merci Jalahin pour tes information.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 décembre 2008 à 20:37:01

                                    Bah sinon en attendant, tu n'envoies pas de mail (il suffit de mettre la ligne en commentaires). Tu t'inscris normalement. Et pour valider l'inscription, tu vas dans phpmyadmin, tu fais copie le code d'activation, et dans ton navigateur tu lances ta page de validation du membre en collant le code dans ton GET (http://localhost/tonsite/validation.php?code="ce que tu viens de copier dans phpmyadmin".
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 décembre 2008 à 20:25:26

                                      Voila, j'ai fait comme tu m'as conseillé Jalahin à peu de chose prés. J'ai mis le lien dans le code PHP d'inscription
                                      <?php
                                       if(isset($_POST['pseudo'])and isset($_POST['motDePasse']) and isset($_POST['passe']) and isset($_POST['mail']) and isset($_POST['email']))
                                       {
                                        if(($_POST['pseudo']) !=null and ($_POST['motDePasse'] !=null) and ($_POST['passe'] !=null) and ($_POST['mail'] !=null)
                                        and ($_POST['email'] !=null)  and preg_match("#^[a-zA-Z0-9._-]{3,15}$#",  $_POST['pseudo']))
                                        {
                                         if($_POST['motDePasse'] == $_POST['passe'] and preg_match("#^[a-zA-Z]{4,15}$#", $_POST['motDePasse']))
                                         {
                                          if($_POST['mail']==$_POST['email'] and preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
                                          {
                                           mysql_connect("localhost","root","");
                                           mysql_select_db("essai");
                                           $pseudo=mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
                                           $motDePasse=mysql_real_escape_string(md5('cochon' .htmlspecialchars($_POST['motDePasse'])));
                                      	 $mail=mysql_real_escape_string(htmlspecialchars($_POST['mail']));
                                      	 $code=time() .rand();
                                           $retour=mysql_query("select pseudo from connect where pseudo= '$pseudo'");
                                           $donnees=mysql_fetch_array($retour);
                                            if($donnees['pseudo'] ==$pseudo)
                                            {
                                            echo $pseudo .' existe deja';
                                            }
                                            else
                                            {
                                            mysql_query("insert into connect values('', '$pseudo', '$motDePasse', '$mail', '$code', '0')");
                                            echo'Veuillez valider votre session';
                                      	  echo'<a href="http://localhost/php/validation.php?code=' .$code .'">Un petit lien</a>';
                                            }
                                           mysql_close();
                                           }
                                          else
                                          {
                                          echo 'mail invalide';
                                          }
                                         }
                                         else
                                         {
                                         echo 'Mot de passe invalide';
                                         }
                                        }
                                        else
                                        {
                                        echo 'Identifiants invalide';
                                        }
                                       }
                                      ?>
                                      

                                      Voici la deuxième page.
                                      <?php
                                      if(isset($_GET['code']))
                                      {
                                      $codes=$_GET['code'];
                                      mysql_connect("localhost","root","");
                                      mysql_select_db("essai");
                                      echo'Vous etes bien inscrit';
                                      mysql_query("update connect set actif='1' where code='$codes'");
                                      mysql_close();
                                      }
                                      ?>
                                      

                                      J'ai vérifié et ça marche assez bien en attendant que je puisse envoyer des mails mais il y a encore une chose que je voudrais savoir au niveau de la deuxième page: n'y a-t-il pas un problème de sécurité?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 décembre 2008 à 11:44:07

                                        Ben ça m'a l'air pas mal tout ça. Je te conseille cependant quelques petites "améliorations":

                                        A la place de
                                        <?php
                                         if(isset($_POST['pseudo'])and isset($_POST['motDePasse']) and isset($_POST['passe']) and isset($_POST['mail']) and isset($_POST['email']))
                                         {
                                          if(($_POST['pseudo']) !=null and ($_POST['motDePasse'] !=null) and ($_POST['passe'] !=null) and ($_POST['mail'] !=null)
                                          and ($_POST['email'] !=null)  and preg_match("#^[a-zA-Z0-9._-]{3,15}$#",  $_POST['pseudo']))
                                        ?>
                                        

                                        mets plutôt ceci:
                                        <?php
                                        if (!empty($_POST['pseudo']) AND ($_POST['motDePasse']) AND ($_POST['passe']) AND ($_POST['mail']) AND ($_POST['mail']))
                                        ?>
                                        

                                        C'est quand même plus rapide et plus lisible (en fait le !empty vaut un isset + un != NULL; autant s'en servir).

                                        Ensuite, à la place de:
                                        <?php
                                        $donnees=mysql_fetch_array($retour);
                                              if($donnees['pseudo'] ==$pseudo)
                                        ?>
                                        

                                        Essaye plutôt:
                                        <?php
                                        $donnees=mysql_fetch_assoc($retour);
                                              if($donnees['pseudo'] == FALSE)
                                        ?>
                                        

                                        Normalement c'est plus rapide de travailler avec des boléens (TRUE et FALSE).

                                        Et enfin, un dernier petit conseil: vérifie que le mail n'est pas dans ta base de données; parce que si deux membres ont le même mail, ça peut poser des problèmes par la suite (même si à priori le mec qui fait ça est le même; mais bon du coup tu limites un peu les multi comptes).

                                        Pour la deuxième page, pour accroitre la sécurité, vérifie que le GET est bien un nombre, entier de préférence. Ensuite, tu peux faire une redirection (ou un message d'erreur) si le code n'existe pas dans ta BDD. De la même manière, rajouter après WHERE code='$codes' un AND actif = 0 (WHERE code='$codes' AND actif = 0), comme ça si le compte a déjà été activé, tu peux rediriger ou mettre un message d'erreur. Après je pense qu'il y a encore plein d'améliorations à faire, mais bon tel quel c'est déjà suffisant.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 décembre 2008 à 15:05:42

                                          Voila, j'ai essayé de faire tes amélioration et je dois dire que dans l'ensemble ça a marché. J'ai eu un peu de mal avec la vérification du mail mais ça a été réglé.
                                          Pour résoudre ça j'ai sauvegardé sur un autre fichier et ça été.
                                          Quant à la redirection, je ne sais pas trop comment faut faire. Est-ce que tu pourrais m'expliquer comment faire si par exemple je veux rediriger tout de suite sur la page d'accueil des membres?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            18 décembre 2008 à 16:47:06

                                            <?php header('Location: accueil_membres.php'); ?>

                                            Sinon, tu ferais bien de lire le tutoriel officiel PHP du sdz, ça te rafraichirait la mémoire, car tes problèmes sont des questions basiques auxquelles mateo répond dans son tuto.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 décembre 2008 à 15:38:30

                                              Merci Nanocom pour cette dernière information.
                                              Je vais pouvoir de ce pas clôturer ce sujet. J'ai tout ce qu'il me faut maintenant pour faire un site avec plusieurs sessions (à part peut-être tout ce qui concerne l'envoi du mail mais j'aviserais en temps voulu).
                                              Merci à tous ceux qui ont bien voulu me répondre et me guider. J'ai désormais la réponse aux question que j'avais posé au début et même plus.
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              comment faire une session avec login et mot de passe choisi?

                                              × 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