Les sessions sont adaptées à la sauvegarde de données confidentielles ou importantes. On peut citer quelques exemples courants de leur mise en application :

  • authentifier un visiteur ;
  • garder des informations sur un utilisateur tout au long de sa présence dans votre application ;
  • gérer le panier d’achat d’un internaute sur votre site marchand ;
  • mettre en place des formulaires en plusieurs parties et donc retenir les informations fournies dans les pages précédentes ;
  • effectuer un cache par utilisateur de certaines actions coûteuses en ressources.

1 - Qu'est-ce qu'une session ?

Au lieu de stocker vos informations chez le visiteur, vous les stockez sur le serveur. Techniquement, vous attribuez au visiteur un identifiant. À chaque fois qu'il revient en annonçant cet identifiant, PHP récupérera toutes les informations qu'il avait sauvegardé et qui sont relatives à ce visiteur.

2 - Lecture et écriture

L'utilisation des sessions est très simple pour le programmeur : la manipulation est presque transparente et il suffit de lire ou d'écrire dans un tableau associatif classique une fois l'initialisation de la session faite.

La session s'initialise avec session_start(). PHP essaie alors de lire l'identifiant fourni par l'utilisateur, va chercher le fichier correspondant, et vous met à disposition les informations sauvegardées dans la superglobale $_SESSION[].

bool session_start ( void )

Ecriture d'une variable de sessions

Pour ecrire dans une variable de session il suffit d'initialiser les sessions via session_start() et d'ecrire dans la superglobale $_SESSION[].

Ecriture d'une variable de session

<?php
// initialisation
session_start() ;

$_SESSION['langage'] = 'PHP 5'; 
?>

Apres cette instanciation il sera possible sur toutes les pages suivantes d'afficher la valeur de la variable de session $_SESSION['langage'].

Lecture d'une variable de sessions

Lecture d'une variable de session

<?php
// initialisation
session_start() ;

// tester la présence de la variable 'langage' dans la session
if ( isset( $_SESSION['langage'] ) ) {
   
  echo 'langage existe dans la session et sa valeur est ' ;
  // lecture de la variable de session 'langage'
  echo $_SESSION['langage'] ;
} else {

  echo 'langage n\'existe pas dans la session' ;
} 
?>

Pour résumer, les informations de session se manient exactement comme des variables PHP. Vous pouvez ajouter, enlever ou modifier des éléments à la session simplement en modifiant le tableau de session.

Suppression d'une session

PHP efface la session de lui-même au bout d'un certain temps.

Si vous voulez forcer la destruction de la session vous pouvez utiliser la fonction session_destroy().

Suppression d'une variable de session

<?php
// on initialise et utilise la session
session_start();
$_SESSION['nom'] = 'Pierre';
echo $_SESSION['nom']; // affiche Pierre

// divers traitements

// on détruit la session
session_destroy();
unset($_SESSION['nom']);
echo $_SESSION['nom'] ; // n'affiche rien
?>

Notez que cette fonction ne fait qu'effacer le fichier de données sur le serveur, elle n'efface pas les variables présentes dans $_SESSION[] ni ne supprime le cookie. Si vous voulez éviter tout risque de confusion, effacez $_SESSION[] aussi.

Grossomodo c'est tout ce qu'il faut savoir pour utiliser des variables de sessions. Si vous voulez voir une mise en pratique regardez le tutoriel sur la création d'un espace sécurisé.

3 - Configuration des sessions

Attention cette partie ne s'adrèsse qu'aux personnes ayant des besoins spécifiques qui ont la main sur leur serveur. Générallement la configuration par défaut suffira largement.

Les directives de configuration suivantes se trouvent dans le fichier de configuration php.ini au dessous de l’entrée [session]. Presque toutes sont redéfinissables pendant l’exécution du script via la fonction ini_set().

Initialisation des sessions

Le nom de la session par défaut (et donc du cookie envoyé pour la session) peut être changé au niveau de la configuration pour ne pas avoir à faire un appel à session_name()en haut de chaque script. La directive est session.name.

session.name = "PHPSESSID"

Vous pouvez aussi demander à PHP de démarrer automatiquement la gestion des sessions sur chacune de vos pages, vous évitant de faire un appel à session_start(). Pour obtenir ce comportement, il suffit de mettre la directive session.auto_start à 1 (la valeur par défaut est 0). Cela peut toutefois entraîner une charge supplémentaire non négligeable si vous n’utilisez pas les sessions dans tous vos scripts.

session.auto_start = 0

Stockage des données de session

Le répertoire de sauvegarde par défaut et le module utilisé pour la sérialisation sont aussi modifiables via le fichier de configuration. Les directives utilisées sont session.serialize_handler et session.save_path. Les paramètres sont les mêmes que pour les fonctions session_module_name()et session_save_path().

session.serialize_handler = "php"
session.save_path = "/tmp"