Sessions - les cookies du serveur en PHP
Nous avons souvent besoin de stocker plus d'informations dans cookies, mais la limite maximale pour les cookies est de 4 kB, ce qui est peu. Sessions résout ce problème en stockant les données sur le serveur web, et ne stocke qu'un court identifiant dans le navigateur du client pour savoir quelles données appartiennent à quel client.
Démarrer une session
Avant de travailler sur les sessions, nous devons d'abord les démarrer. Cela se fait en appelant la fonction session_start() au début du script :
session_start();
Avertissement fort : aucune sortie vers le code HTML ne doit être exécutée avant d'appeler la fonction
session_start()!
Sécurité de la session
Le contenu de la session est stocké sur le serveur et seul l'identifiant est envoyé au navigateur du client. L'utilisateur n'a donc aucun moyen de savoir ce qui est stocké dans la session. La seule façon pour le script d'affecter l'utilisateur est de supprimer l'identifiant (auquel cas le script en génère un nouveau).
Récupération des données d'une session
Toutes les sessions sont stockées dans la variable superglobale $_SESSION et peuvent être parcourues comme un tableau.
Par exemple, le nom de l'utilisateur actuellement connecté peut être récupéré en écrivant :
echo $_SESSION['utilisateur'];
Note : La session peut ne pas toujours exister (par exemple, si vous êtes un nouvel utilisateur). Par conséquent, nous devrions toujours vérifier l'existence de ces messages avant toute inscription et proposer un autre message d'erreur si nécessaire.
if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur']) {echo 'Utilisateur connecté :' . $_SESSION['utilisateur'];} else {echo 'Personne ne s'est connecté.';}
Sauvegarde des données dans la session
La sauvegarde se fait comme un simple enregistrement de données dans une variable :
$_SESSION['utilisateur'] = 'Honzik';
Le serveur web se chargera de la disposition technique du stockage correct sur le serveur et de l'envoi de l'identifiant à l'utilisateur.
Suppression de sessions
Nous pouvons supprimer les valeurs individuelles séparément en fonction de la clé :
unset($_SESSION['utilisateur']);
Ou alternativement toutes les sessions disponibles :
unset($_SESSION);
Note : La suppression d'une session spécifique ne vide pas la valeur de la clé, mais supprime complètement la clé. Par conséquent, un message d'erreur sera émis si l'on tente de lire une clé inexistante. On peut toujours vérifier facilement l'existence d'une clé avec la fonction
isset().
Validité maximale de la session
Chaque session enregistrée a une limite de durée de conservation sur le serveur. PHP contient directement un script cron qui supprime périodiquement les anciennes sessions.
La valeur par défaut est généralement 1440 secondes, soit 24 minutes.
L'augmentation de la valeur doit se faire à deux endroits :
- Dans
php.ini, on définit la longueur maximale de validité que le serveur conservera. La valeur est définie par la directivesession.gc_maxlifetime, - Du côté du script PHP, vous devez spécifier la validité actuelle demandée.
Utilisation en PHP :
// le serveur maintiendra la session jusqu'à 3600 secondes = 1 heure.ini_set('session.gc_maxlifetime', '3600');// tous les clients (navigateurs) seront// session envoyée avec une validité d'exactement 3600 secondessession_set_cookie_params(3600);session_start(); // nous pouvons commencer la session !