Tuto original de FABRICE POTEC, revu par LionZion, Molokai et Raf en août 2004
Le principe d'utiliser les sessions pour
verrouiller l'accès de certaines pages d'un site aux
seules personnes autorisées (login/password) est devenu
quelque chose de commun. Nous allons voir l'une des méthodes
possibles pour le réaliser en PHP.
Le principe est très simple :
Le visiteur entre son login et mot de passe dans un formulaire d'identification
Dans le script qui recoit les données du formulaire :
>> On récupère dans la table le mot de passe qui correspond
au login fourni par le visiteur
>> si ce mot de passe ne correspond pas à celui fourni par
le visiteur, alors on le renvoie vers le formulaire d'identification
>> si le mot de passe du visiteur correspond a celui de la table,
alors on ouvre une session et on enregistre la variable login. Puis on fait
un lien vers la page d'accueil de l'espace membres
sur toutes les pages de l'espace membres, en haut : on vérifie
si la variable login est bien enregistrée comme variable de session:
si oui, on affiche la page, sinon on affiche le formulaire d'identification
Création de la table des membres
Pour commencer nous allons créer une table
mySQL qui va nous permettre de stocker les membres,
celle-ci ne comportera que peu d'informations pour notre
exemple. Voici la syntaxe :
Création
de la table dans phpMyAdmin
Comme vous le voyez ne seront stockés
que l'ID, le Pseudo du visiteur, son Login ainsi que son Password.
A vous bien sûr de créer un formulaire d'inscription
pour alimenter cette table :).
N.B: La table pourrait
avoir une structure plus large si vous souhaitiez y
ajouter d'autres informations sur le visiteur (ex: site
perso, adresse e-mail, icq, etc.)
La page de LOG-IN des visiteurs
Comme sur n'importe quel site ayant une section privée,
le visiteur doit entrer son Login/Password et valider.
Il faut maintenant analyser le login/password du formulaire.
Si le visiteur a fourni le bon login/password, alors la variable login est
enregistrée comme variable de session, sinon on affiche le formulaire
d'identification.
En enregistrant login comme variable de session, cela signifie que php va garder
en mémoire la valeur de cette variable et que vous n'aurez pas à
vous soucier de la transmettre de page en page. Bien sûr vous pouvez
enregistrer autant de variables que vous le souhaitez.
Analyse du formulaire (login.php)
<? // pensez a ouvrir une connexion vers mysql ici // voir les exercices dans le menu de droite pour cela.
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST); //
on recupère le password de la table qui correspond au login
du visiteur
$sql = "select pwd from tbl_user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur
SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] != $pass)
{
echo '<p>Mauvais
login / password. Merci de recommencer</p>';
include('login.htm'); //
On inclut le formulaire d'identification
exit;
}
else {
session_start();
$_SESSION['login']
= $login;
echo 'Vous
etes bien logué';
// ici vous pouvez
afficher un lien pour renvoyer
// vers la page d'accueil de votre espace
membres
}
}
else { echo '<p>Vous
avez oublié de remplir un champ.</p>';
include('login.htm'); //
On inclut le formulaire d'identification
exit; }
?>
Notez qu'une session ne reste valable que tant que le visiteur garde son
navigateur ouvert. S'il le ferme, la session est perdue et celui-ci au cas
où il voudrait revenir devrait se re-loguer à nouveau.
Il nous reste maintenant à voir comment protéger les pages
de l'espace membre.
Protéger une page (verif.php)
<?
session_start();
/*
si la variable de session login n'existe pas cela siginifie que le
visiteur
n'a pas de session ouverte, il n'est donc pas logué ni autorisé
à
acceder à l'espace membres
*/
if(!isset($_SESSION['login']))
{
echo 'Vous n\'êtes
pas autoris´ à acceder à cette zone';
include('login.htm');
exit;
}
?>
Ici encore, c'est très simple : si la variable login n'est pas enregistrée,
alors cela signifie que le visiteur ne s'est pas logué. Dans ce cas
on affiche le formulaire d'identification.
Ce code doit être placé sur chaque page que vous souhaitez protéger,
et tout en haut de la page.
Pour finir
Comme d'habitude sur Php Débutant nous ne voyons que
certaines fonctions, à vous de faire le reste, elle sont
listées plus bas. Sachez tout de même que l'utilisation
des certaines de ces fonctions est maintenant devenu obsolète
à cause des variables globales à OFF et de l'utilisation
du tableau global $_SESSION.