7.PHP pour le web

7.7.Les sessions

7.7.1.Introduction

Les sessions ne sont réellement supportée dans PHP que depuis la version 4. Ces session sont très utiles dans la mesure où elles sont les seules à permettre un suivi fiable du visiteur dans un site.
Les sessions permettent d'enregistrer des variables propres à un utilisateur. Par exemple dans le cas d'un caddie virtuel, on souhaite garder en mémoire ce que le client a mis dans son caddie.
Les variables de sessions sont enregistrées sur le serveur. Le système est donc radicalement différent de celui des cookies (qui sont stockés sur le poste client par le navigateur).
Cependant, on doit garder un identifiant de session pour retrouver les variables de l'utilisateur. Cet identifiant est donné par PHP et est unique. Celui-ci peut-être propagé de plusieures façons : Par un cookie (à la condition que l'utilisateur accepte les cookies). Par l'URL (plus contraignant pour le serveur mais seule solution envisageable si l'utilisateur refuse les cookies)
Pour autoriser la propagation de l'identifiant de session par l'URL (URL rewriting) le paramètre session.use_trans_sid de php.ini doit être mis à 1 (valeur par défaut).
Le nom du paramètre de session est lui aussi précisé dans php.ini par session.name (il vaut généralement PHPSESSID ce dont vous pouvez vous assurer en appelant <?php phpinfo() ?> ) l'instruction <php echo $PHPSESSID; ?> affiche l'identificateur de session.
Si l'identificateur de session n'est pas transité par défaut, il faut alors appeler toutes les pages en ajoutent l'argument PHPSESSID=$PHPSESSID.

7.7.2.Utilisation

La façon d'utiliser les sessions a beaucoup changé depuis PHP 4.1 et surtout depuis la configuration proposée par défaut depuis PHP 4.2. (vous pouvez ainsi laisser tomber les fonctions session_register(string), session_is_registered(string) et session_unregister(string)).
Il ne reste donc quasiment que session_start() et session_destroy() qui soient réellement important.
session_start() permet de spécifier que la page fait appel aux sessions. session_destroy() permet de supprimer la session (nettoyage des fichiers sur le serveur).
Pour utiliser une variable de session, il suffit d'accéder à l'élement du tableau $_SESSION[] ayant pour clé, le nom de la variable.
Pour affecter une valeur à une variable de session il suffit de faire
session_start();  // Une fois par script
$_SESSION["mavar"] = "ma valeur";
et pour l'afficher
session_start();  // Une fois par script
echo $_SESSION["mavar"];

7.7.3.Mise à jour

Pour mettre à jour vos anciens scripts, sachez que
session_register("mavar");
$mavar = "une valeur";
doit desormais s'écrire (avec un seul session_start() par page)
session_start();
$_SESSION["mavar"] = "une valeur";
et
session_unregister("mavar");
doit desormais s'écrire
unset($_SESSION["mavar"]);
tandis que
session_is_registered("mavar");
peut être assimilé à
isset($_SESSION["mavar"]);

7.7.4.Conclusion

Manipuler les sessions est plutôt aisé et apporte beaucoup. Avec ces sessions, il est par exemple très simple de faire un système de caddie virtuel.
Pour les plus expérimentés, il est possible de redéfinir les fonctions qui servent à enregistrer les données ainsi, au lieu de stocker les variables de sessions dans un fichier on peut stocker ces variables directement dans une base de données. La fonction s'appelle session_set_save_handler() (Attention c'est réservé aux experts).