TUTORIELS 
La gestion des sessions en PHP4
Disponible depuis la version 4 de PHP, la gestion des sessions est une solution efficace et élégante pour la transmission d'informations au sein d'un site web.  (6 octobre 2001)
 

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.

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page