Réalisation des pages principales de l'espace membres



Nous avons déterminé un peu plus tôt la liste des pages dont nous avons besoin au minimum pour gérer nos membres :

  • inscription ;
  • connexion ;
  • déconnexion.


Nous n'allons pas écrire le code de ces pages mais nous allons passer en revue ce qu'il faut savoir pour les réaliser correctement.


La page d'inscription


La page d'inscription est en général constituée de quatre champs :

  • pseudonyme souhaité ;
  • mot de passe ;
  • confirmation du mot de passe (pour éviter les erreurs de saisie) ;
  • adresse e-mail.


Il est recommandé de limiter autant que possible le nombre d'informations demandées. Le visiteur souhaite pouvoir s'inscrire très rapidement. S'il tombe sur une page avec de nombreux champs à remplir, il y a de fortes chances qu'il laisse tomber. Laissez-le remplir les autres champs (comme sa signature, sa messagerie instantanée et sa date de naissance) dans un second temps lorsqu'il sera inscrit.


Certains sites ne demandent pas de pseudonyme et utilisent l'adresse e-mail comme identifiant. C'est une possibilité, notamment sur les sites d'e-commerce, mais si vos membres seront amenés à poster des messages sur des forums, il est préférable qu'ils s'inscrivent avec un pseudonyme.


La figure suivante présente un formulaire basique d'inscription.



Un formulaire d'inscription



Le champ du mot de passe est de type password afin d'empêcher la lecture du mot de passe à l'écran par une autre personne. C'est pour cela qu'il est fortement recommandé de demander de saisir à nouveau le mot de passe au cas où le visiteur ait fait une faute de frappe qu'il n'aurait pas pu voir.


Avant d'enregistrer l'utilisateur dans la base de données, il faudra penser à faire un certain nombre de vérifications.

  • Le pseudonyme demandé par le visiteur est-il libre ? S'il est déjà présent en base de données, il faudra demander au visiteur d'en choisir un autre.
  • Les deux mots de passe saisis sont-ils identiques ? S'il y a une erreur, il faut inviter le visiteur à rentrer à nouveau le mot de passe.
  • L'adresse e-mail a-t-elle une forme valide ? Vous pouvez utiliser une expression régulière pour le vérifier.


Si toutes ces conditions sont remplies, on peut insérer l'utilisateur dans la base de données. Comme je vous le disais plus tôt, il est très fortement conseillé de hacher le mot de passe avant de le stocker, afin qu'il ne soit plus « lisible ».


Voici dans les grandes lignes à quoi pourrait ressembler le code qui insère un nouveau membre dans la base :

<?php

// Vérification de la validité des informations

 

// Hachage du mot de passe

$pass_hache = sha1($_POST['pass']);

 

// Insertion

$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');

$req->execute(array(

    'pseudo' => $pseudo,

    'pass' => $pass_hache,

    'email' => $email));


Ce code est un simple canevas qui illustre les principales étapes de la création d'un membre. C'est à vous de le compléter. De plus, je vous invite à respecter l'architecture MVC : vous utiliserez le contrôleur pour vérifier la validité des informations et pour hacher le mot de passe, tandis que le modèle se chargera simplement d'exécuter la requête.


On vérifie d'abord la validité des informations comme je vous en ai parlé plus haut, ensuite on hache le mot de passe et enfin on peut insérer le membre dans la base. Sous phpMyAdmin, on voit donc apparaître le membre comme sur la figure suivante.



Un membre ajouté dans la base de données



Son mot de passe haché n'est pas lisible et cela nous assure qu'on ne peut pas le « voler ». Notez que, pour augmenter la sécurité, on peut « saler » le mot de passe. Cela consiste à lui ajouter un préfixe avant de le hacher afin de rajouter une certaine complexité : $pass_hache = sha1('gz' . $_POST['pass']);.


Nous verrons lors de l'étape de connexion comment vérifier si le membre entre bien le bon mot de passe.


On pourrait ajouter d'autres étapes pour renforcer la sécurité de l'inscription. En particulier, renseignez-vous sur les systèmes de Captcha qui demandent au visiteur de recopier un mot issu d'une image afin de vérifier qu'il ne s'agit pas d'un robot. D'autre part, vous pourriez demander une confirmation par e-mail afin de vérifier que l'adresse est correcte.


La page de connexion


Maintenant que le membre est créé, il doit pouvoir se connecter sur votre site. Pour cela, nous utiliserons le système de sessions qui est mis à notre disposition par PHP et que nous avons appris à utiliser plus tôt dans ce cours.

Habituellement, on demande au moins le pseudonyme (ou login) et le mot de passe du membre. Pour lui faciliter la vie, on peut lui proposer une option de connexion automatique qui lui évitera d'avoir à se connecter de nouveau à chaque visite du site (figure suivante).



Un formulaire de connexion




La page qui reçoit les données du formulaire de connexion doit hacher de nouveau le mot de passe et le comparer à celui stocké dans la base. S'il existe un membre qui a le même pseudonyme et le même mot de passe haché, alors on autorise la connexion et on peut créer les variables de session. Sinon, on renvoie une erreur indiquant que le pseudonyme ou le mot de passe est invalide.

<?php

// Hachage du mot de passe

$pass_hache = sha1($_POST['pass']);

 

// Vérification des identifiants

$req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo AND pass = :pass');

$req->execute(array(

    'pseudo' => $pseudo,

    'pass' => $pass_hache));

 

$resultat = $req->fetch();

 

if (!$resultat)

{

    echo 'Mauvais identifiant ou mot de passe !';

}

else

{

    session_start();

    $_SESSION['id'] = $resultat['id'];

    $_SESSION['pseudo'] = $pseudo;

    echo 'Vous êtes connecté !';

}


Après avoir de nouveau haché le mot de passe, on essaie de récupérer une entrée dans la table membres qui corresponde à ce pseudonyme et ce mot de passe haché. Si $resultat vaut faux, cela signifie qu'aucune entrée ne correspond et donc que l'identifiant ou le mot de passe est mauvais. Sinon, on peut créer les variables de session et y stocker par exemple l'id et le pseudonyme du membre. Désormais, sur toutes les pages du site, on pourra indiquer au membre qu'il est connecté grâce à la présence des variables$_SESSION.

<?php 

if (isset($_SESSION['id']) AND isset($_SESSION['pseudo']))

{

    echo 'Bonjour ' . $_SESSION['pseudo'];

}


Si le membre souhaite être reconnecté automatiquement (ce qu'il est conseillé de faire uniquement sur un ordinateur personnel, et non sur un ordinateur partagé avec d'autres personnes !), je vous invite à créer deux cookies qui stockeront respectivement :

  • le pseudonyme ;
  • le mot de passe haché.


Ainsi, si un visiteur non connecté qui possède ces deux cookies se présente, vous n'aurez qu'à vérifier si un membre correspond à ces informations en base de données et vous pourrez le connecter automatiquement, sans qu'il ait eu à utiliser le formulaire de connexion. Là encore, on prend une certaine mesure de sécurité en stockant le mot de passe haché dans un cookie et non le vrai mot de passe.


Sachez par ailleurs que de nouvelles méthodes de connexion centralisées apparaissent depuis quelque temps. Elles ont pour nom OpenID, Facebook Connect, Windows Live ID, etc. En effectuant quelques manipulations supplémentaires, vous pouvez permettre à vos visiteurs de se connecter à votre site en saisissant leurs identifiants Facebook, Windows Live, Twitter ou encore Google, ce qui leur évite d'avoir à fournir un mot de passe spécialement pour votre site.


Le système RPX est devenu très populaire car il vous permet de mettre en place rapidement ces moyens de connexion sur votre site (figure suivante). Il suffit seulement d'ajouter un champ à votre table membres et d'installer un petit script. Renseignez-vous sur le site web de RPX si vous souhaitez par la suite vous en servir pour améliorer votre espace membres.



RPX permet de se connecter à votre site avec un autre compte



La page de déconnexion

Au bout d'un certain temps d'inactivité, la session du membre est automatiquement détruite et il se retrouve déconnecté. S'il charge à nouveau une page du site, il apparaîtra donc déconnecté, à moins qu'il ait activé la connexion automatique qui aura pour effet de le reconnecter immédiatement et de manière transparente grâce à ses cookies.

Si la déconnexion est automatique au bout d'un certain temps (le fameux timeout), il faut quand même proposer un lien de déconnexion. La page de déconnexion devra supprimer le contenu de $_SESSION, mettre fin au système de sessions (en appelant session_destroy()) et supprimer les cookies de connexion automatique s'ils existent.


<?php 

session_start();

 

// Suppression des variables de session et de la session

$_SESSION = array();

session_destroy();

 

// Suppression des cookies de connexion automatique

setcookie('login', '');

setcookie('pass_hache', '');

Créé avec HelpNDoc Personal Edition: Générateur gratuit de livres électroniques et documentation