Page
1 | 2
Par "personnalisation", nous entendons la mise à
disposition de certains services (éditoriaux ou applicatifs)
en fonction de l'utilisateur.
Il existe plusieurs méthodes pour repérer de manière
unique un internaute qui se connecte sur un site web:
- les "cookies", tout d'abord, dont l'intérêt
est de ne pas contraindre l'utilisateur à s'identifier lors
de chaque visite;
- et les sessions, système n'excluant d'ailleurs pas
les cookies, mais qui permettent aussi de s'en affranchir totalement,
avec l'inconvénient cette fois d'une identification à
chaque visite.
Rappels sur les sessions
Nous avons déjà traité des sessions, aussi
bien en PHP3 qu'en PHP4,
mais sans les replacer dans leur contexte global, qui est celui
de l'authentification d'un utilisateur, et de la mise en rapport
de son profil, stocké en base de données, avec les
informations saisies lors de la connexion. Cette mise en rapport
étant le critère d'ouverture d'une session.
Notre but ici n'est pas de fournir un système complet de
gestion de membres et de sessions, mais de proposer une structure-cadre
incluant les différents fichiers qui devront être mis
en jeu.
Rappelons que tous les fichiers (PHP) dans lesquels ont utilisera
des informations de session devront débuter, avant tout autre
chose, par la ligne:
<?session_start();?>
permettant de récupérer, au sein de la page, les informations
caractérisant la session en cours (celles-ci étant
stockées dans un fichier sur le serveur). Nous laissons de
côté ici, dans un souçi de simplification, les
sessions "nommées" et le stockage en base de données
des "identifiants de session" (voir les tutoriels consacrés
spécifiquement aux sessions en PHP).
Authentification, ouverture et fermeture
de session
Imaginons que l'identification de l'utilisateur soit permise
par une boite de dialogue figurant, par exemple, dans le
fichier .php contenant l'en-tête de page (commun à
l'ensemble du site) ou la colonne de gauche (commune, elle aussi,
à l'ensemble du site). (Ces choix "d'architecture"
sont représentatifs d'un grand nombre de sites, c'est pourquoi
nous les mentionnons ici. Il en existe bien sûr d'autres.)
Un tel fichier (nous l'appelerons login.php) aura la structure
suivante, en supposant qu'une session ouverte par un membre authentifié
implique l'enregistrement dans la session de la variable $userid,
contenant l'identifiant du membre en question:
// affichage
du code HTML précédant le formulaire d'identification
<?
if(!session_is_registered("userid")) { //
test si un membre est connecté ou pas
?>
<form action="/authentification.php" method="POST">
// début du formulaire
// affichage des différents
champs de formulaire:
Identifiant: <input type="text" name="userid"><br>
Mot de passe: <input type="password"
name="userpass">
<input
type="submit" value="OK">
</form>
<a href="/register.php">S'inscrire</a>
// lien vers le formulaire d'inscription
<?
}else{ // si le membre est déjà
connecté alors...
?>
// Affichage
d'un message de bienvenue, par exemple:
Bienvenue <?echo $userid;?>!<br>
<a href="/register.php">Modifier mon profil</a>
- <a href="logout.php">Fermer la session</a>
<?
}
?>
// affichage
du code HTML suivant le formulaire d'indentification
|
Bien sûr, ce fichier (en-tête de page, colonne de gauche,
etc.) sera appelé (grâce à un <?include
"login.php";?>) par un fichier contenant
l'instruction <?session_start();?>
comme indiqué plus haut.
login.php pointe vers trois fichiers: authentification.php
lors de la validation du formulaire, register.php en cas
d'inscription ou de modification du profil (voir plus loin), enfin
logout.php pour fermer la session.
Le premier (authentification.php) aura la structure suivante:
<?
session_start();
if(session_is_registered("userid")){
// déjà connecté
(peut se produire en cas d'appel direct du script): redirection
vers une page d'erreur ou la homepage
$url="/index.php";
}else{
$userpass=md5($userpass); //
cryptage md5 du mot de passe (par exemple)
// instructions de connexion
à la base de donnée
$requete_sql="SELECT userid,userpass[,usermail,...]
FROM membres"; // requête
SQL de rappatriement des identifiants et mots de passe (nous
supposons la table appelée "membres"), plus
éventuellement d'autres informations (e-mail,etc.)
$resultat=mysql_query($requete_sql, $connect);
// où $connect est la variable
caractérisant la connexion établie plus haut
$ok=0;
while($user=mysql_fetch_array($resultat)){
if(!strcmp($userid,$user[userid])
&& !strcmp($userpass,$user[userpass]){
$ok=1; //
il y a correspondance à la fois de l'indentifiant et
du mot de passe crypté
$usermail=$user[usermail];
//etc...
}
}
if($ok){
session_register("userid");
// enregistrement
de l'identifiant dans la session
//
éventuellement, enregistrement dans la session d'informations
complémentaires, par exemple:
session_register("usermail");
$url="/confimation.php";
// redirection
vers une page de confirmation...
} else{
$url="/echec.php"; //
ou vers une page d'erreur si l'authentification a échoué
}
}
header("location: $url");
?>
|
On peut compléter ce script en y ajoutant des instructions
de validation de l'identifiant et du mot de passe (taille minimale,
maximale, etc.)
Avant de s'intéresser à la phase d'inscription,
examinons le fichier logout.php qui va nous permettre de
terminer une session déjà ouverte.
<?
session_start();
if(session_is_registered("userid")){
// déjà connecté
(peut se
produire en cas d'appel direct du script):
redirection vers une page d'erreur ou la homepage
$url="/index.php";
}else{
session_close();
// termine la session en cours, toutes
les variables globales associées sont supprimées
$url="$HTTP_REFERER"; //
redirection vers la page où l'utilisateur à
décidé de terminer sa session
}
header("location: $url");
?>
|
Page
1 | 2
|