Les sessions
Le concept de session
En informatique, une session désigne un intervalle de temps pendant lequel deux systèmes communiquent. Cet intervalle est délimité par l'initiation et la fermeture de la session.
Exemple: lorsque vous utilisez FileZilla, le logiciel envoie des commandes vers le serveur FTP pour initier la session. Une fois la session établie, l'authentification a lieu (si nécessaire) et le transfert de fichiers peut avoir lieu. Ensuite, la session est fermée soit explicitement par l'utilisateur ou après un certain temps d'inactivité détecté par le serveur (time-out).
Au niveau d'une application web, on considère que la session est initiée entre un client (browser) et un serveur web lorsque la première requête HTTP est émise par le client. La session est fermée lorsque le client se déconnecte (fermeture du navigateur) ou après un time-out. Cela correspond à une visite d’un utilisateur.
Durant le laps de temps que dure la visite d'un utilisateur, une application web aura souvent besoin de stocker des informations concernant cet utilisateur, sa visite, les choix qu'il fait…
Les variables de session
Les serveurs applicatifs web proposent un mécanisme qui permet de stocker de l'information dans la mémoire du serveur et de l'associer à un visiteur (anonyme ou non) : les variables de session
L'information étant stockée au niveau du serveur, il n'est plus possible pour le visiteur de la modifier, la lire ou la supprimer.
La durée de vie de ces variables de session est bien sûr liée à la durée de la session : les variables de session disparaîtront lorsque l'utilisateur ferme son browser ou après une certaine période d’inactivité. En PHP, cette période peut être définie dans le fichier de configuration php.ini
Attention
Il est recommandé de stocker dans une session les informations confidentielles ou les informations dont la modification provoquerait un dysfonctionnement de l'application plutôt que dans un cookie !!
Identifiant de session
Si le serveur peut stocker des informations concernant un visiteur dans des variables de session, il faut évidemment que ces variables soient liées à un visiteur unique.
Le serveur a donc besoin d'identifier un ensemble d'instances de variables de sessions comme appartenant à un visiteur particulier et pouvoir identifier les requêtes HTTP qui proviennent de ce visiteur.
Il faut donc :
- un identifiant de session (unique)
- que cet identifiant de session transite dans chaque requête vers le serveur
Lorsque le serveur recevra cet identifiant de session, il pourra établir le lien entre les variables de sessions et le visiteur.
Méthodes de transfert de l'identifiant de session
Le transit de l'identifiant de session peut se faire via 2 techniques :
Utilisation d'un cookie (plus répandu)
- Lors de la création d'une session, le serveur va générer automatiquement un identifiant (complexe) et le stocker dans un cookie
- Le client renverra ce cookie lors de chaque requête
Exemple en PHP : PHPSESSID: alqtuh5hocd62rmred5d4d01i2

Passage dans l'URL
- Si les clients n'acceptent pas les cookies, on peut configurer le serveur pour qu'il passe la valeur de l'identifiant comme paramètre de l'URL
Exemple en PHP : http://www.monsite.be?PHPSESSID=alqtuh5hocd62rmred5d4d01i2
Ce type d'URL pose des problèmes pour le référencement.
PHP & Sessions
Création de session
La création ou la restauration d'une session s'effectue grâce à la fonction suivante :
Attention
L'utilisation de session_start() doit se faire avant d'envoyer des données vers la sortie standard !!
Suppression de variables de session
Si on veut supprimer une variable de session, on peut utiliser la fonction void unset ( mixed $var,... )
La destruction complète d'une session passe par plusieurs étapes :
<?php
// on récupère la session
session_start();
// on ré-initialise le tableau $_SESSION
$_SESSION = array();
// on expire le cookie de session
setcookie("PHPSESSID", "", time()-3600, "/");
// on détruit la session sur le serveur
session_destroy();
?>
Lecture des variables de session
Tant que la session est active, les variables de session sont accessibles par tous les scripts via $_SESSION