Apprendre PHP & MySQL : Sessions
Les sessions offrent la possiblité de stocker des données propres à un utilisateur durant sa navigation.
Qu’est-ce qu’une session ?
Une session en PHP est un moyen de stocker des données propres à chaque utilisateur d’un site internet durant… une session ! Dans le monde du web, une session correspond au temps de navigation d’un utilisateur, de son arrivée sur une page, jusqu’à son départ du site.
Les sessions n’ont pas vocation à stocker des informations indéfiniment (ou du moins de longue durée comme une base de données), mais bien seulement pendant une session.
Les sessions permettent ainsi de conserver des informations utilisateur de page en page, et ce de manière beaucoup plus sûre que les cookies, car les informations seront stockées sur le serveur et non sur les ordinateurs des visiteurs.
Démarrage
Avant toute chose, il est important de démarrer une session avec la fonction session_start()
. Cette fonction doit être appelée tout en haut de la page, avant la moindre ligne de HTML ou PHP (avant même le <!DOCTYPE html>
).
Notez aussi qu’il va falloir appeler session_start()
dans chacune des pages dans lesquelles nous souhaitons accéder aux variables de session. En ce sens, on exploite généralement le système d’inclusion de fichiers (avec require
ou include
) pour factoriser notre session_start()
au sein d’un unique script.
<?php session_start(); ?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Démarrage d'une session</title>
</head>
<body>
</body>
</html>
Lorsqu’une session est créée, PHP génère un numéro unique servant à l’identifier. Cet identifiant de session unique sera transmis de page en page via un cookie nommé PHPSESSID
.
La fonction session_start()
se charge d’abord de vérifier si une session a déjà été démarrée en recherchant la présence du cookie PHPSESSID
.
- Si c’est le cas, elle la récupère
- Si ce n’est pas le cas, elle démarre une nouvelle session (puis génère cet identifiant de session)
session_start()
permet donc de démarrer une nouvelle session si aucun identifiant de session n’existe, ou de reprendre une session existante dans le cas contraire.
Manipulations
Créer une variable
On définit une variable de session par l’intermédiaire de la variable superglobale $_SESSION
. Il s’agit d’un tableau associatif, qui, comme pour les paramètres GET
et POST
ou encore les cookies, stocke les données de session en les associant à une clé.
session_start();
$_SESSION['username'] = "Toto";
Lire une variable
Lorsqu’une variable de session est définie sur une page, elle devient accessible durant la durée de la session à partir de toutes les pages du site pour lesquelles les sessions ont été activées. On pourra alors en récupérer sa valeur depuis notre variable superglobale $_SESSION
.
session_start();
if (!empty($_SESSION['username'])) {
echo "<p>Bienvenue " . $_SESSION['username'] . "</p>";
} else {
echo "<p>Bienvenue, n'hésitez pas à vous connecter pour personnaliser votre espace</p>";
}
Détruire une variable
Pour supprimer une variable de session spécifique, on utilise la fonction unset()
.
unset($_SESSION['username']);
Vider la session
Il est également possible de détruire l’ensemble de ses variables, on dit alors qu’on « vide la session ».
Cela se fait en réaffectant un tableau vide à la variable superglobale $_SESSION
.
$_SESSION = array();
Destruction
Une session PHP se détruit automatiquement lorsqu’un utilisateur ferme la fenêtre du navigateur. En revanche, il est parfois souhaitable de détruire une session manuellement (ex: déconnecter un utilisateur, vider un panier, etc.).
Pour détruire toutes les données associées à la session courante, on fait appel à la fonction session_destroy()
. Cette fonction n’est pas vraiment utile en dehors de la déconnexion à un site web.
session_destroy();
Concrètement, elle supprime le fichier de session dans lequel sont stockées toutes les données de session, mais elle ne détruit pas les variables globales associées à la session (contenu du tableau $_SESSION
) ni le cookie de session PHPSESSID
.
- Pour supprimer le cookie de session
PHPSESSID
on utilise la fonctionsetcookie()
, en y précisant un timestamp antérieur en tant que paramètre d’expiration. - Pour supprimer les variables globales
$_SESSION
, il suffit de lui affecter un tableau vide avec$_SESSION = array()
comme vu précédemment.