Pour des sites plus évolués comme des sites internes d'entreprises (intranet), des sites applicatifs(www.bugnon.vd.ch), des sites commerciaux, il est courant d'utiliser un accès réservé à des utilisateurs enregistrés, qui s'identifient par des mots de passe. Afin de faciliter la naviguation de ces sites, il ne faut pas que l'identité de l'utilisateur se perde au changement de page, et qu'il doive se ré-identifier. Pour cela, il existe un module de sessions dans PHP.
La gestion des sessions n'a été ajoutée au language PHP qu'à partir de la version 4. Le protocole HTTP étant un protocole sans connexion permanante, le serveur et le client mettent fin à la connexion à la fin de chaque requête. Ce fesant il n'existe aucune liaison entre les différentes requêtes.
La fonction de gestion des sessions crée automatiquement un identificateur de session requis pour le traitement des sessions et se charge de la sérialisation et de l'enregistrement des données associées à la session:
Attention: consultez php.net pour lire les dernières spécifications.
Une session est démarrée soit par la fonction session_start() soit implicitement par la fonction session_register().
|
Fonction
|
Action
|
|---|---|
| session_start() | démarre une session |
| session_destroy() | met fin à la session et efface les données |
| session_name() | retourne le nom de la session en cours |
| session_id() | retourne le code de la session en cours |
| session_is_registred() | vérifie si une variable est enregistrée dans la session |
| session_register() | enregistre une variable dans la session courante |
| session_unregister() | supprime une variable de la session courante |
| session_encode() | retourne les données sérialisées de la session courante |
| session_decode() | décode les données sérialisée de la session courante et initialise les variables correspondantes. |
La fonction session_register($var) indique à PHP que la variable $var doit être enregistrée dans la session en cours. En plus cela indique à PHP de modifier la valeur enregistrée dans la session lorsque la valeur dans le script change. Autrement dit, la valeur dans la session est toujours actualisée par le script. $var peut être une variable de n'importe quel type.
Il y a cependant une limite à l'utilisation des fonctions sessions, il faut les insérer dans le code source tout en haut du document, car ces informations circulent dans l'en-tête http de la connexion serveur-client.
|
Code PHP
|
Résultat
|
|---|---|
| <? // se place tout en haut du document! //démarre la session session_start(); session_register("email") ?> |
invisible... |
| <?php // récupère id & nom session $nom = session_name(); $id = session_id(); echo "nom session: $nom<br>"; echo "id session: $id<br>"; // enregistre un e-mail |
nom session: PHPSESSID id session: 67edd9c307a2255642c5fe1538cac59d |
Pour tester cet exemple, il suffit d'ouvrir une fenêtre et de voir si l'email est encore enregistré! contrôle...
Concrètement, il n'est pas pratique d'utiliser la fonction session_register() pour chaque variable à enregistrer si il y a plus de quelques variables. Une solution élégante que j'utilise dans mes site est de n'utiliser qu'un tableau $SESSION dans lequel je met toutes les valeurs à sauvegarder dans un élément. Il suffit alors d'appeler une seule fois en haut de chaque page session_register($SESSION).
|
Code PHP
|
Résultat
|
|---|---|
| <? // se place tout en haut du document! session_start(); session_register("SESSION"); // vérifie que $SESSION |
invisible... |
| <?php // enregistre un e-mail // actualisé dans la session $SESSION["address"] = "Rue de la gare 19"; $SESSION["city"] = "1000 Lausanne"; echo $SESSION["address"]; echo "<br>"; echo $SESSION["city"]; ?> |
Rue de la gare 19 1000 Lausanne |
Pour tester cet exemple, il suffit d'ouvrir une fenêtre et de voir si l'adresse est encore enregistrée! contrôle...
Créez un petit site composé de deux pages avec des liens entre elles. Dans la première demandez au visiteur son nom, et faites-le apparaîre dans le texte de la seconde page.
Dans le même petit site, à la première page demandez au visiteur si il préfère lire le texte en noir sur blanc, vert sur noir, ou jaune sur vert-foncé (ou autres couleurs de votre choix) et affichez les autres pages dans le style choisi!