Les sessions en PHP
Une session est une superglobale qui est définie par la variable $_SESSION[ ].
Il s’agit d’un tableau associatif qui permet de stocker des valeurs.
Contrairement aux autres variables sa durée de vie ne se limite pas à la durée de vie de la page. Ces valeurs sont stockées sur le serveur et peuvent donc être réutilisées sur n’importe quelles pages du même site.
Les sites marchands utilisent, par exemple, les sessions pour la création de paniers. On retrouve aussi les sessions sur les sites qui proposent des accès membres via un formulaire d’identification.
Créer une session
La fonction session_start() qui est obligatoire va démarrer une nouvelle session. Elle doit être appelée avant tout affichage de contenu dans la page (echo ou affichage html).
<?php
session_start(); // demarre une session
?>
Note : paramètrez votre éditeur de code sur un encodage UTF-8 (sans BOM)
En effet, le BOM (byte order mark) est un indicateur d’ordre des octets, une sorte de signature qui indique l’utilisation d’un encodage unicode ainsi que l’ordre des octets. Il est généralement situé au début du fichier PHP donc son affichage peut empêcher le fonctionnement de session_start().
Fonctionnement interne des sessions
Au démarrage d’une session PHP va créer un fichier texte (coté serveur). Le chemin de ce fichier sera enregistrer dans un Cookie (coté client). Par défaut l’identifiant du Cookie est PHPSESSID.
La fonction session_start() va donc lire ou créer le cookie pour pouvoir accéder au fichier distant. Donc si les cookies ne sont pas activés, les sessions ne seront pas utilisables.
Ensuite les données du fichier seront lues par PHP (mode lecture) et stockées en mémoire dans la superglobale $_SESSION[]. A l’inverse si vous remplissez la variable $_SESSION[], PHP va à la fin du script écrire les valeurs de la superglobale dans le fichier (mode écriture).
Note : il existe une limite de taille (maximum 8mo) pour la variable session. Plus on est proche de cette limite et plus les performances du serveur diminuent (ralentissement).
Enregistrer une valeur dans une session
Pour pouvoir retrouver la valeur d’une variable sur toutes les pages du site, on enregistrer cette valeur dans une session.
<?php
session_start(); // à mettre tout en haut de la page
//.... autres scripts
$nb = 2;
$_SESSION['nombre'] = $nb; // on enregistre la valeur 2 dans la session
?>
La chaîne ‘nombre’ est la clé du tableau associatif de la session.
Enregistrer un tableau dans une session
Il est possible d’enregistrer plusieurs valeurs sous forme de tableau dans une session.
<?php
session_start(); // à mettre tout en haut de la page
//.... autres scripts
$achat = array("fruit", "céréale", "légumes");
$_SESSION['mesAchats'] = $achat; // on enregistre le tableau $achat dans la session
?>
Rien ne vous empêche d’enregistrer dans la session un tableau multidimensionnel.
Récupérer les valeurs d’une session
L’intérêt des sessions est la récupération des données sur n’importe quelle page du site. Dans la pratique, on affecte les valeurs de la session dans une nouvelle variable qu’on manipule (lecture, modification) par la suite.
<?php
session_start(); // à mettre tout en haut de la nouvelle page
//.... autres scripts
$achat = $_SESSION['mesAchats']; // on affecte $achat par la valeur contenu dans la session
echo $achat[0];
?>
Affichage
fruit
Souvenez vous (voir plus haut) que le premier élément du tableau avant de le mettre dans la session était ‘fruit’.
Détruire une session
Pour détruire une session (comme pour déconnecter un membre), il faut vider la superglobale $_SESSION[], puis supprimer le ficher qui est situé sur le serveur avec la fonction session_destroy().
<?php
session_start(); // à mettre tout en haut de page
$_SESSION = array(); // supprime les variables de la session
session_destroy(); // supprime le ficher sur le serveur
?>
Note : Il ne faut pas détruire $_SESSION avec unset($_SESSION) car cela désactive l’enregistrement des variables de session à partir du tableau superglobal.
Si vous voulez détruire complètement la session, effacez aussi le cookie de session.
<?php
session_start(); // à mettre tout en haut de page
$_SESSION = array(); // supprime les variables de la session
if (ini_get("session.use_cookies")) { // supprime le cookie
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy(); // supprime le ficher sur le serveur
?>
Détruire une variable de session
Si vous souhaitez détruire qu’une variable de session mais pas toutes les variables, utilisez la fonction unset().
<?php
session_start(); // à mettre tout en haut de page
unset($_SESSION['mesAchats']);.
?>