PHP3 Hypertext PreProcessor A brief PHP3 Tutorial  

Table des matières | Version Anglaise / English version ]

Annexe 1: Les Sessions avec PHP4

Configuration - Paramétrage

Bien que cela ne soit pas obligatoire, il est recommandé d'utiliser l'extension .php pour les scripts PHP en version 4. Avec PHP3, on employait habituellement l'extension .php3.

Le principe est que chaque visiteur du site reçoit au début de sa visite un identifiant unique. Cet identifiant est ensuite transmis de page en page, afin de permettre de suivre le déroulement de ses actions. Cela permet de savoir que le visiteur A a commandé les articles A1, A2 et A3, alors que le visiteur B a commandé B2 et B3.
Cet identifiant unique peut être stocké dans un cookie, soit propagé par les URL longues.

L'utilisation des sessions de PHP4 peut se faire avec ou sans cookies côté client. Afin de se prémunir contre les navigateurs qui refusent les cookies, on peut également transmettre l'identifiant de session dans les URL longues des différentes pages du site.
Ainsi, entre deux pages consécutives, le lien se fera sur http://monserveur.mondomaine.fr/application/... .../mapage.php3?PHPSESSID=CA3F1261FB81395BB4A

Une session permet de gérer un contexte. Le contexte est l'ensemble de plusieurs variables dont le contenu persiste sur plusieurs pages de l'application (Voir l'exemple des sites commerciaux, avec alimentation de 'Paniers' ou de 'Caddies'). Actuellement, les contextes peuvent contenir des variables scalaires (chaînes, entiers, flottants, etc...) mais aussi des tableaux (Array). En revanche, les contexte ne peuvent pas contenir d'objets PHP (un objet PHP est une instance d'une classe PHP).

Le fichier de configuration php.ini comporte désormais une section dédiée à la configuration de la gestion de sessions. On y trouve en particulier les paramètres suivants :

 

Fonctions

session_start — Initialise les données d'un nouvelle session, ou rafraichit les données de la session en cours.
session_destroy — Vide le contexte, détruit toutes les données de la session active (sans supprimer le cookie ni fermer la session).
session_name — Retourne ou fixe le nom de la session.
session_module_name — Retourne ou fixe le module de session courant (Ndt : Gasp, c'est quoi ? Ca semble être le module en charge du stockage des variables de session, actuellement seul existe le module "file")
session_save_path — Retourne ou fixe le chemin des fichiers Ascii contenant les contextes. Voir session.save_path dans le php.ini.
session_id — Retourne ou fixe l'identifiant de session (SID).
session_register — Enregistre une variable dans la session courante.
session_unregister — Supprime une variable du contexte courant. session_destroy() est équivalent à un session_unregister() de toutes les variables de la session courante.
session_is_registered — Détermine si une variable donnée fait ou non partie du contexte courant.
session_decode — Decode les données de session contenues dans une chaîne.
session_encode — Encode Les données de la session actuelle dans une chaîne. Ceci permet leur stockage dans une simple zone VARCHAR d'un SGBD.

Mise en oeuvre

La première opération consiste, lors de l'accès au site à créer une session, et à transmettre son identifiant au navigateur. Ceci se fait par l'appel à la fonction session_start(), sans lui passer aucun paramètre. Cette fonction doit être placée en tout début de script. En effet, puisqu'elle génère un cookie, elle doit être placée avant l'envoi des headers HTTP, faute de quoi, une erreur serait signalée.

Dès ce moment, la session est créée. Dans la suite du script, l'appel à session_id() retourne la valeur de cet identifiant unique, qui peut ressembler à : CA3F1261FB81395BB4A

Pour transmettre la valeur d'une variable d'une page à une autre, il faut spécifier que l'on souhaite faire enregistrer cette variable en tant que variable de session. Pour cela, on utilise la fonction session_register(), à laquelle on passe en paramètre le nom de la variable, débarassé de son préfixe $.

<?php
 // Session créée ? Si Non, en créer une nouvelle
 if ($PHPSESSID)
   session_start($PHPSESSID);
 else
   session_start();
?>

<!-- Début du Html, envoi des entêtes par le serveur Http -->
<html>
  <head>
    <title>PHP4 Session Start</title>
  </head>
  <body>
    <h1>PAGE 1 : PHP4 Session Start</h1>
    <hr>
    <br>

<!-- Affichage de la clé de session, enregistrement d'une variable -->
<?php
    $sid = session_id();
    $sname = session_name();  
    echo "Votre clé de session est : $sid <br>Le nom de cette session est : $sname <br>\n";

    // Ajout de la variable $venant_depuis au contexte de la session
    $venant_depuis = $HTTP_REFERER;
    session_register("venant_depuis");  // La variable est désormais dans le contexte
?>    
    <br>
    <hr>
    <center> 
       <a href="start_shopping.php">Cliquer ici pour commencer votre shopping</a>
    </center>
  </body>
</html>

Pour passer la clé de session à la page suivante, il est conseillé de placer la clé de session dans l'URL de la page de destination. PHP4 propose un raccourci, afin de rendre cette écriture plus concise et plus facile à interprêter. Il s'agit d'une écriture condensée, calquée sur la syntaxe des ASP de Microsoft. Le lien vers la seconde page s'écrira donc comme ceci : <?=SID?>

// Ecriture courte 
<a href="start_shopping.php?<?=SID?>">Commencer votre shopping</a>
// Ecriture longue 
<a href="start_shopping.php?session_name()=session_id()">Commencer votre shopping</a>

Par la suite, toute autre page utilisée dans la session devra répercuter la clé de session sur les pages suivantes. Toute page devra commencer par les lignes suivantes :

<?php
  if ($PHPSESSID)
   session_start($PHPSESSID);
 else
   session_start();  // Normalement, on ne doit pas créer de session en plein milieu du site
?>

Documentation

Table des matières | Version Anglaise / English version ]

mailto:clauer@linux-france.org | http://linux-france.org/article/devl/php3/tut/php3_tut.html | Version initiale 1.0 - 16/01/2000