Apparue avec le PHP4, la gestion des sessions soulage le développeur
PHP. Les sessions permettent en effet de véhiculer au sein
d'un "objet session" des variables propres aux visiteurs
d'un site internet. Voyons comment ces fonctions participent à
une navigation contextuelle de l'internaute.
Les solutions classiques
Si vous souhaitez transmettre, sans session, des variables de pages
en pages, la transmission par URL ou par formulaire,
sont les deux méthodes les plus couramment employées.
La première de ces deux manières de faire pose déjà
plusieurs problèmes :
- Limitation du nombre de caractères de l'URL (255)
- Sauf cryptage explicite, les informations apparaissent "en
clair" dans l'URL
- Peu sûr.
Exemple :
<a href="total.php?login="arnaud"&pwd="azerty"&prix="32"&ref="abc">Votre
prix </a>
Quant aux formulaires et leurs champs "hidden"...
<form name="prix" method="post"
action="total.php">
<input type="hidden"
name="login" value="<?echo($login)?>">
<input type="hidden"
name="pwd" value="<?echo($pwd)?>">
<input type="hidden"
name="prix" value="<?echo($prix)?>">
<input type="hidden"
name="ref" value="<?echo($ref)?>">
</form>
... Ils sont plus discrets mais forcent le développeur à
réécrire entre chaque page l'ensemble des variables
qu'il souhaite transporter vers une autre page. Cette méthode
est fastidieuse et source d'oublis.
Enfin, le stockage de l'information dans des cookies ne
constitue pas une solution fiable car le client ne les accepte pas
forcément. Si vous souhaitez néanmoins les utiliser,
vous devez impérativement doubler cette solution par une
transmission par URL ou par formulaires.
Le "SID", ce messager salvateur
Grâce aux sessions, la vie du développeur est grandement
facilitée. Toutes les informations liées à
un internaute peuvent être transmises par une seule variable
: L'identificateur de session, plus couramment appelé "SID".
Afin d'illustrer le fonctionnement de cet identifiant, voici un
exemple de transmission entre deux pages, via les sessions (nous
reprenons les informations du paragraphe précédent
: login, mot de passe, prix et référence).
(session1.php)
<?
session_start();
$login="arnaud";
$password="azerty";
$prix="32";
$ref="abc";
session_register("login"); //
"Charge" la variable $login dans la session courante
session_register("password");
session_register("prix");
session_register("ref");
header("Location: session2.php?".session_name()."=".session_id());
?>
Cette page a pour fonction de transmettre les variables "login",
"password", "prix" et "ref" à
la page "session2.php". Revenons sur les fonctions qui
la composent :
"session_start()" est nécessaire à
l'activation du système de session en PHP4. Cette fonction
doit être placée en tout début de fichier, aucun
caractère affichable ne doit se trouver avant elle, pas même
un espace. Elle a pour but de vérifier si l'internaute
possède déjà une session (auquel cas ses informations
sont retrouvées) où si la session doit être
créee, comme ici.
Dans ce cas, "session_start()" va générer
un identifiant unique (ex : 6c3e97ca2b2103bb58e5ae2e55c2c349), qui
va permettre de distinguer les sessions des différents utilisateurs
du site entre elles. Un fichier temporaire par session est crée
sur le serveur (ex : "sess_6c3e97ca2b2103bb58e5ae2e55c2c349").
Sous windows, c'est le fichier "php.ini" ( "session.save_path")
qui détermine l'endroit où est stocké le fichier
de session côté serveur. C'est également dans
ce fichier que vous pouvez paraméter, entre autres, la durée
de vie d'une session ("session.gc_maxlifetime"),
ainsi que son nom ("session.name").
Pour que les variables ("login", "password",
"prix", "ref") soient "chargées"
dans la session, nous faisons appel à "session_register()".
La dernière fonction de l'exemple ci-dessus utilise la fonction
"header()". Il est en effet intéressant d'un point
de vue pédagogique d'utiliser ce moyen pour passer à
la page suivante plutôt qu'un simple lien puisque PHP4 permet,
selon ses directives de compilation, de ne pas avoir à rajouter
le SID dans l'URL de destination.
Si néanmoins vous souhaitez vérifier si votre serveur
PHP supporte cette option, rechercher la directive de compilation
("enable-trans-sid") grâce à l'exécution
d'un simple <?phpinfo()?> sur
votre serveur.
Sans cette option, le SID ne sera pas transmis implicitement dans
l'URL (la fonction "header()" ne supporte de toute façon
pas la transmission implicite du SID).
Enfin, "session_name()" et "session_id()"
permettent respectivement de récupérer le nom de la
session courante (celui que vous pouvez redéfinir dans votre
php.ini), et la valeur du SID. A noter que même si vous passez
le SID par URL, PHP tentera de le passer par cookies (au cas où
le client les acceptent). Si vous ne souhaitez pas que PHP procède
ainsi (car vous n'avez aucune utilité des cookies), modifiez
votre php.ini et passez "session.use_cookies" à
0. Cette démarche est facultative.
Il est maintenant temps de transmettre nos informations à
la page suivante :
(session2.php)
<?
session_start();
echo("login : $login<br>");
echo("password : $password<br>");
echo("prix :$prix<br>");
echo("ref :$ref<br>");
if ($login != "arnaud")
session_destroy();
?>
Cette fois "session_start()" repère que
la session est déjà créée, les informations
de cet internaute sont donc récupérées, les
variables "login", "password", "prix",
"ref" sont désormais exploitables.
Un des gros avantages des sessions apparaît dès lors
: Une fois les variables "enregistrées", il suffit
de les transmettre de page en page par le biais d'un simple SID
transmis par URL (par exemple), et toutes seront à nouveau
exploitables après un simple appel à "session_start()"
sur la page suivante.
Nous venons de parcourir les fonctions de base essentielles à
la gestion des sessions sous PHP4, sachez néanmoins qu'il
en existe d'autres.
Si vous n'avez pas de compte chez un hébergeur disposant
de PHP, vous pouvez télécharger "Easyphp"
pour travailler en local.
Dans un prochain article nous retrouverons la gestion des sessions
mais cette fois sous PHP3. Bien que cette version de Php ne dispose
pas d'un ensemble de fonctions qui leurs soient dédiées,
il existe en effet des moyens pour y remédier.
|