Aller au contenu

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

cookieDeSession

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 :

Référence officielle >>

<?php 
bool session_start (void)

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

<?php 
(...)
$username = $_SESSION['username'];
(...)
?>