L'Authentification en PHP 1. Ca sert à quoi ?
Si vous souhaitez protéger par mot de passe, et login, l'accès à certaine partie de votre site, c'est très simple, il suffit de savoir le faire. On me demande souvent "comment je fais pour restreindre l'accès ?", en fait, la vraie question, et c'est comme ça qu'il faut opérer comme pour tout, c'est "comment je fais pour autoriser certaines personnes à accéder à cette partie du site". Il existe principalement 2 types d'authentification (mis à part les certificats clients pour lesquels le problème est différent, et je n'ai pas les moyens de le tester pour l'instant !!!) : Mais ceci ne sert qu'à autoriser l'accès à une page. Il peut être pratique ensuite de garder l'authentification en mémoire si l'on souhaite l'utiliser plus tard. Par conséquent, les systèmes de login/password sont souvent utilisés conjointement aux cookies. Si vous souhaitez des infos sur les cookies, vous pouvez aller sur ma page sur les cookies en PHP. Je vais donc traiter ici les 2 sujets le plus simplement et succinctement possible, en précisant dans un premier temps les différences entre les 2 types d'authentification. 2. Différences entre les types d'authentification
Ca, c'est de la transition... J'aurais du être animateur télé !!! En fait, voici les différences majeures entre les 2 systèmes :
3. Exemple avec un fichier .htaccess
Déjà, il faut créer le fichier .htaccess et le fichier .htpasswd. Pour ce faire, en cas de soucis, vous pouvez aller ici : info sur .htpasswd et .htaccess. Vous avez donc vos fichiers correctement paramétrés, et qui protègent tout un répertoire. Dans ce répertoire, mettez un fichier "index.php" qui sera celui que vous utiliserez pour vos tests (évidemment, si vous préférez autre chose, n'hésitez pas, mais c'est le nom que je vais utiliser dans toute la page !). Voici un exemple de code pour récupérer le login utilisé par l'utilisateur : <html> <head> <title>Authentification .htaccess</title> </head> <body> L'utilisateur authentifié est :<br> <?php $User = getenv("Remote_User"); echo "<b>$User</b><br>\n"; ?> </body> </html> Ce code affiche donc le nom de l'utilisateur enregistré sur le site. Il vous suffit donc de créer les cookies associés si vous souhaitez garder les infos enregistrées pour d'autres pages. En ajoutant un cookie, voici ce que vous obtiendriez : <?php Pour rappel, les cookies ne peuvent être fixés qu'en en-tête du fichier et plus après... D'où le traitement avant l'affichage
de "<html>".
$User = getenv("Remote_User"); setCookie("UserName",$User); ?> <html> <head> <title>Authentification .htaccess</title> </head> <body> L'utilisateur authentifié est :<br> <?php echo "<b>$User</b><br>\n"; ?> </body> </html> 4. Exemple avec base de données
Dans ce cas, il faut déjà avoir les informations de connexions à la base (serveur, login, mot de passe, nom de la base). Il faut d'abord créer une page qui demande le login et le mot de passe de l'utilisateur. Voici un exemple pour ce genre de page : <html>
Ensuite, voici le code de la page "login.php" correspondant, en supposant que la table dans laquelle est enregistrée le
mot de passe et le login de l'utilisateur est "Utilisateur" :<head> <title>Authentification Base de Données</title> </head> <body> <form action="login.php" method="post"> <font color="white"><b>Login :</b><input size="20" value="" name="un"><br> <b>Mot de passe :</b><input type="password" size="20" value="" name="pw"><br> <input type="submit" value="Entrer"> </body> </html> <html> Ce code n'est évidemment pas parfait, mais il fonctionne. Il ne vous reste plus qu'à l'appliquer à votre cas perso, et le faire
évoluer pour vous en améliorant la sécurité (cryptage des mots de passe par exemple), ajout de cookie, et autres détails de ce style.<head> <title>Authentification Base de Données</title> </head> <body> <?php $hostname = "monmysql.fournisseur.fr"; // nom du serveur ou se trouve votre base $username = "login"; $password = "password"; $database = "mabase"; $link = mysqli_connect($hostname,$username,$password, $database); $stmt = "Select * from Utilisateur where login='".$un."'"; $result = mysqli_query($link,$stmt); if (mysqli_num_rows($result) == 0) { echo "Login incorrect"; } else { $row = mysqli_fetch_object($result); $dbpasswd = $row->PassWord; if ($dbpasswd == $pw) { echo "Login et mot de passe OK"; } else { echo "Mot de passe incorrect"; } } ?> </body> </html> |