Les sessions
Voyons maintenant un tutorial vraiment important pour la sécurité
de vos scripts : les sessions.
En effet, afin de transmettre des variables de pages en pages, plusieurs
possibilités s'offrent à vous :
- les divers champs des formulaires, qu'ils soient hidden
ou non.
- passer les variables directement à travers les liens.
- utiliser les cookies.
- utiliser les sessions.
Cependant, toutes ces possibilités n'offrent pas le même niveau de sécurité.
En effet, certaines de ces possibilités sont vraiment pratiquent dans
leurs modes d'utilisation (comme les cookies par exemple mais tout le
monde n'est pas obligé d'accepter les cookies), ce qui implique, dans
la majorité des cas, un bas niveau de sécurité (cas du passage des
variables par les liens, ce qui implique que les variables seront
visibles de tout le monde).
De même, faire dans chaque page un formulaire contenant des champs
hidden permettant de faire circuler les différentes variables à
travers toutes les pages du site n'est pas vraiment pratique.
C'est pourquoi, dans tous ces cas où la sécurité de vos données est
primordiale, vous devrez utiliser les sessions
qui vous permettront de faire circuler différentes variables (comme un
mot de passe par exemple) à travers les pages de votre site, tout en étant
assez confortables à l'emploi.
Pour utiliser les sessions, différentes fonctions PHP s'offrent à
nous. Voici déjà un petit tableau vous permettant de vous familiariser
avec ces différentes fonctions (que nous détaillerons bien sur dans la
suite de ce tutorial) :
Sachez également qu'ils existent d'autres fonctions agissant sur les
sessions.
En revanche, étant donné qu'elles ne sont pas nécessaires à la compréhension
de notre tutorial, nous ne les détaillerons pas ici (cf. la
documentation pour de plus amples informations).
Cependant, ces fonctions commencent toujours par session.
Attention !!!
Avant d'aller plus loin dans le tutorial, vous devez savoir que les
sessions ne sont accessibles qu'à partir de PHP 4.
Cependant, je vous rassure, la plupart des hébergeurs sont aujourd'hui
fait évoluer leur PHP en PHP 4.
Afin de voir concrètement comment fonctionnent les sessions,
prenons alors un exemple simple :
- imaginons que notre site possède une section
membre où chaque membre devra se logué avant de pouvoir y
entrer.
- de plus, on aimerait bien être sur qu'il s'agisse toujours de ce même
membre qui est connecté.
On aura alors une page contenant un formulaire permettant à notre
visiteur de se connecter à une section membre (page index.htm)
:
<html>
<head>
<title>Formulaire d'identification</title>
</head>
<body>
<form action="login.php" method="post">
Votre login : <input type="text" name="login">
<br />
Votre mot de passé : <input type="password" name="pwd"><br />
<input type="submit" value="Connexion">
</form>
</body>
</html>
D'après cette page, vous pouvez remarquer que lorsque le visiteur le
remplira et qu'il cliquera sur le bouton de connexion, on se retrouvera
au niveau de la page login.php avec une
variable $login qui contiendra le login de
notre visiteur ainsi qu'une variable $pwd
contenant son mot de passe ; variables qu'il faudra naturrellement
tester avant de démarrer notre session (car seuls les membres pourront
accéder à notre espace membre, espace où l'on utilisera notre
session).
On aura alors par exemple (page login.php) :
<?php
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$login_valide = "moi";
$pwd_valide = "lemien";
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd'])) {
// on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
// dans ce cas, tout est ok, on peut démarrer notre session
// on la démarre :)
session_start ();
// on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
// on redirige notre visiteur vers une page de notre section membre
header ('location: page_membre.php');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
echo '<body onLoad="alert('Membre non reconnu...')">';
// puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=index.htm">';
}
}
else {
echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>
Remarquer également que nous utilisons notre session_start
avant tout code HTML.
Voyons alors le code de la page de notre section membre, la page page_membre.php.
On a :
<?php
// On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
session_start ();
// On récupère nos variables de session
if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
// On teste pour voir si nos variables ont bien été enregistrées
echo '<html>';
echo '<head>';
echo '<title>Page de notre section membre</title>';
echo '</head>';
echo '<body>';
echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.';
echo '<br />';
// On affiche un lien pour fermer notre session
echo '<a href="./logout.php">Déconnection</a>';
}
else {
echo 'Les variables ne sont pas déclarées.';
}
?>
Voyons alors le code de la page permettant au membre de se déconnecter
(la page logout.php).
On aura alors :
<?php
// On démarre la session
session_start ();
// On détruit les variables de notre session
session_unset ();
// On détruit notre session
session_destroy ();
// On redirige le visiteur vers la page d'accueil
header ('location: index.htm');
?>
Résumons alors tout ce que nous venons de voir :
- chaque session à un id différent (ce qui
permet d'éviter la confusion entre les connexions).
- à chaque page où notre session doit être active, on doit placer un session_start
en tout début de page (avant tout code HTML).
- toutes les variables enregistrées au cours
de notre session, seront accessibles dans les pages
de notre session.
- n'oubliez JAMAIS de détruire vos variables de
session lors de la déconnexion.
En respectant ces règles vous pourrez très rapidement faire vous-même
votre espace membre, voir même pourquoi pas une boutique en ligne :)