Les sessions
Les sessions et PHP
On entend régulièrement que http est un protocole sans état ou 'statless'. Cela veut dire que le protocole HTTP ne comprend pas de mécanisme de maintien des états entre deux transactions. Lorsqu'un utilisateur demande une page et puis une autre, HTTP n'offre aucun moyen de spécifier que les deux requêtes émanent du même utilisateur.
Le contrôle de session vise à permettre le suivi d'un utilisateur tout au long d'une session sur un site. Les cookies nous ont déjà permis de faire cela mais avec une certaine limitation au niveau des tailles et avec le risque de contrôle par l'utilisateur. Pour la sauvegarde de données confidentielles ou importantes les sessions sont plus adaptées que les cookies.
Leurs applications sont diverses : authentification d'un visiteur, gérer le panier d'achat d'un client sur une boutique en ligne, etc. On peut ainsi envisager la mise en place de formulaires en plusieurs étapes (page par page) donc les données ne seront pas postées d'une page à une autre mais gardées en session, jusqu'à la validation finale.
Dans ce chapitre nous allons voir une à une les principales étapes d'un contrôle de session.
Démarrage d'une session
De base, chaque session est caractérisée par un numéro d'identification ID qui permet d'enregistrer des variables de session. Les contenus des variables de session sont stockés sur le serveur.
L'ID de session est la seule information visible du coté du client. Sous forme d'un nombre aléatoire crypté, un ID de session est générer par PHP lui même. Ce numéro peut être stocké sur l'ordinateur comme un cookie ou bien passé en paramètre par l'URL.
Avant d'exploiter la fonctionnalité de PHP relative aux sessions, il faut commencer par ouvrir une session. Trois possibilités nous sont offertes:
La première possibilité est la plus simple de tous. Elle consiste à appeler la fontion session_start() tout au début du code. Cette fonction vérifie s'il y a déjà un ID pour la session courante. S'il y en a déjà un, elle charge les variables de session enregistrées pour qu'elles puissent être utilisées dans le corps du programme. Sinon, elle crée un ID de session.
La deuxième possibilité serait d'utiliser la fontion session_register(). Cette option est souvent utilisée dans le cas où la directive register_globals est activée dans le fichier de configuration php.ini.
Une session est automatiquement ouverte lorsque l'on essaie d'enregistrer une variable de session avec cette fonction.
Il nous reste encore une troisième possibilité c'est l'ouverture de session automatique à chaque venue d'un visiteur. Cette option est configurable dans le fichier de configuration php.ini. Cela consiste à définir l'option session.auto_start.
Enregistrement des variables de session
Comme les cookies, les variables de session sont aussi stockées dans un tableau super global. Celui qui correspond aux sessions est $_SESSION. Pour créer une variable de session, on définit un élément dans un de ces tableaux comme suit :
$_SESSION['myvar']=5 ;
On peut aussi procéder autrement en utilisant la fonction session_register.
Exemple
<?php $var=8 ; session_register('var') ; ?>
Le nom de la variable à enregistrer dont être passée en paramètre de la fonction, et sans le préfixe dollar '$'.
La variable var peut alors être utilisée d'un script à un autre jusqu'à la fin de la session.
Utilisation de la variable session
Après avoir ouvert la session, on peut accéder à la variable via le tableau global $_SESSION. Il faut quand même s'assurer que les variables de session ont bien été définies. Vous pouvez par exemple vérifier cela à l'aide de la fonction isset() ou empty().
On peut aussi vérifier que la variable en question est bien une variable de session. La fonction session_is_registered('var') retourne true si la variable qui lui est passée en argument est de type session. Elle retourne false dans le cas contraire.
Toutefois, si on utilise les tableaux super globaux, on n'a pas à utiliser cette fonction. On peut accéder directement au tableau de la manière suivante :
if(isset($_SESSION['var']))...
Suppression de la session : unset
Une fois qu'on en a terminé avec une variable de session, on peut la supprimer comme suit en cas d'utilisation des tableaux superglobaux :
unset($_SESSION['var']);
L'idéal étant de vider cette variable auparavant :
$_SESSION['var'] = "";
Puis
unset($_SESSION['var']);
Sinon, il est toujours possible de supprimer cette variable à l'aide de la fonction session_unregister();
Après avoir supprimé toute les variables, il ne reste plus qu'à détruire la session complètement en appelant la fonctions session_destroy().