Les Sessions en PHP
Sommaire
- 1- Objectifs
- 2- Présentation des sessions PHP
- 3- Création de sessions et de variables de session
- 3.1- Exemple
- 4- Appeler une session
- 5- Suppression de sessions et de variables de session
- 5.1- Utiliser le tableau superglobale $_SESSION :
unset()
- 5.2- Détruire la session du visiteur avec:
session_destroy()
- 5.3- Supprimer une variable dans la session courante avec :
session_unregister()
- 6- Durée de vie d'une session ?
- 7- Différentes fonctions (sessions) utilisées en PHP
- 8- Application
- 8.1- Suivi des visites précédentes sur une page
- 8.1.1- Cours PHP
Les Sessions en PHP
-
Objectifs
- Connaitre les sessions en PHP
-
Présentation des sessions PHP
- Une session en PHP correspond à une façon de stocker des données différentes pour chaque utilisateur en utilisant un identifiant de session unique.
- Comme les cookies, les sessions offrent également un moyen de maintenir l’état d’un site Web ou d’une application, en utilisant une approche légèrement différente.
- Ce tutoriel explique comment les sessions fonctionnent sous PHP, et les fonctions PHP pour créer et utiliser des sessions au sein d’un Web application.
- A présent, vous savez ce que sont les cookies : des fichiers texte stockés sur le système d’un utilisateur qui aident un site Web ou une application reconnaît l’utilisateur et récupère des informations spécifiques le concernant.
- Le problème avec les cookies, c’est qu’ils ne sont pas très sécurisés : parce qu’ils sont stockés sur le client, il est possible pour tout utilisateur raisonnablement habile d’ouvrir le fichier cookie et de lire ou modifier les informations qui y sont stockées, parfois à des fins malveillantes.
- C’est pourquoi de nombreux sites Web préfèrent utiliser des sessions. Les sessions fonctionnent un peu comme les cookies, sauf que les informations utilisées pour maintenir l’état sont stockées sur le serveur, plutôt que sur le client.
- Dans un environnement basé sur des sessions, chaque client est identifié par un numéro—identifiant de session et ce numéro unique est utilisé pour relier chaque client avec ses informations sur le serveur.
- Chaque fois que le client visite le site Web ou l’application, le site lit l’identifiant de session du client et restaure les informations d’état à partir d’une donnée référentiel sur le serveur.
- Dans ce système, les informations d’état sont stockées dans une base de données SQL ou un fichier texte sur le serveur; par conséquent, les utilisateurs ne peuvent pas y accéder ou le modifier, ce qui rend l’ensemble du système tellement plus sûr.
- L’identifiant de session lui-même peut être stocké sur le client dans un cookie, ou il peut être passé de page en page dans l’URL. Sous PHP, ce cookie est nommé PHPSESSID.
- Les sections suivantes traitent des fonctions PHP pour créer des sessions, s’inscrire et utiliser variables de session et détruire les sessions.
-
Création de sessions et de variables de session
- Il est facile de démarrer une nouvelle session sous PHP : il suffit d’appeler la fonction
session_start()
pour créer une nouvelle session et générer un ID de session pour le client. - Une fois qu’une session a été créé, il devient possible de créer et d’attacher un nombre quelconque de variables de session à la séance ; ce sont comme des variables régulières, en ce sens qu’elles peuvent stocker du texte ou du numérique, mais elles sont aussi particulières car elles restent présentes tout au long de la session, au fur et à mesure que l’utilisateur clique sur différentes pages du site.
- Les variables de session sont “enregistrées” en les enregistrant en tant que paires clé-valeur du tableau associatif
$_SESSION
. - Comme $_POST et $_GET, ce tableau est toujours disponible dans le portée global et peut être consulté directement à tout moment dans votre script PHP.
-
Exemple
-
Appeler une session
- La fonction
session_start()
définit généralement un cookie contenant l’ID de session sur le système client. Par conséquent, comme avec la fonction setcookie(), les appels àsession_start()
doit précéder toute sortie générée par le script. Ceci est dû aux restrictions dans le Protocole HTTP qui nécessite l’envoi d’en-têtes de cookies avant toute sortie de script. - Il est désormais possible d’accéder à ces variables de session depuis n’importe quelle autre page du même Domaine Web.
- Pour cela, créez un nouveau script PHP, recréez la session en appelant
session_start()
puis essayez d’accéder aux valeurs du tableau associatif$_SESSION
, comme dans l’exemple suivant : -
Suppression de sessions et de variables de session
-
Utiliser le tableau superglobale $_SESSION :
unset()
- Pour désinscrire une variable de session spécifique, désactivez simplement la clé correspondante du Tableau
$_SESSION
: -
Détruire la session du visiteur avec:
session_destroy()
- Si vous voulez détruire la session du visiteur, vous pouvez faire un lien “Déconnexion” qui amène vers une page qui fait appel à la fonction
session_destroy()
- La commande
session_destroy()
détruit toutes les données enregistrées d’une session. -
Supprimer une variable dans la session courante avec :
session_unregister()
- La commande
session_unregister()
supprime une variable dans la session courante. - Elle retourne TRUE si success, FALSE sinon.
- Elle a pour syntaxe :
boolean session_unregister (string name)
-
Durée de vie d’une session ?
- Dés que l’on ferme le navigateur la session est détruite.
- Sauf à configurer le fichier php.ini avec session.lifetime qui fixe la durée de vie, en secondes, du cookie envoyé au client. La valeur 0 signifie “jusqu’à ce que le client soit fermé”. Par défaut à 0. session.lifetime = 0
- Donc si on le laisse à zéro la session dure jusqu’à la fermeture du navigateur, pour laisser les données durant 30 minutes, il faut remplacer 0 par 1800 (= 30 minutes * 60 secondes dans une minute).
-
Différentes fonctions (sessions) utilisées en PHP
- Pour utiliser les sessions, différentes fonctions PHP s’offrent à nous. Voici un petit tableau vous permettant de vous familiariser avec ces différentes fonctions :
-
Application
-
Suivi des visites précédentes sur une page
- Mettons maintenant toute cette théorie en contexte, en construisant une application simple qui démontre comment fonctionnent les sessions.
- L’exemple suivant utilise une session pour enregistrer chaque visite effectuée par un utilisateur à une page Web.
- A chaque visite, le script imprime les dates et heures de toutes les visites précédentes et ajoute un enregistrement pour la visite en cours à la session.
- Ce script fonctionne en créant une session à chaque fois qu’un utilisateur visite la page et en stockant la date des visites de l’utilisateur dans la variable de session $_SESSION[‘visits’].
- A chaque visite suivante, la session est recréée, le tableau contenant les dates des visites précédentes sont restaurées et une boucle foreach est utilisée pour parcourir ce tableau et imprimer ses enregistrements dans un format de date et d’heure lisible par l’homme.
<?php
// start session
session_start();
// register session variables
$_SESSION['surname'] = 'Riadh';
$_SESSION['name'] = 'HAJJI';
?>
<?php
// Démarrer la session
session_start();
// Lire les variables de session
// sortie : "Bienvenue, Riadh HAJJI"
echo 'Content de te revoir, ' . $_SESSION['surname'] . ' ' . $_SESSION['name'] ;
?>
<?php
// Démarrer la session
session_start();
// effacer la variable de session
unset($_SESSION['name']);
?>
<?php
// Démarrer la session
session_start();
// effacer la session
session_destroy();
?>
Il est important de noter qu’avant de pouvoir détruire une session avec
session_destroy()
, vous devez d’abord recréer l’environnement de session (afin qu’il y ait quelque chose à détruire) avecsession_start()
.
Fonction | Signification |
---|---|
session_start | Démarre une session |
session_register | Enregistre une variable de session |
session_unregister | Efface une variable de session |
session_is_registered | Vérifie si une variable est déclarée pour la session en cours |
session_id | Retourne l’id de la session en cours |
session_name | Retourne le nom de la session en cours |
session_unset | Detruit toutes les variables de la session en cours |
session_destroy | Destruit la session en cours |