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
- 7.1- Liste des fonctions (sessions)
- 7.2- La valeur de session
$_SESSION['id']
- 8- Applications
- 8.1- App01: Suivi des visites précédentes sur une page
- 8.2- App02: Suivi des visites précédentes sur une page
- 8.3- App03: Stocker un utilisateur connecté en session
- 8.4- App04: un menu Bootstrap 5
- 8.4.1- Cours PHP
Les Sessions en PHP
-
Objectifs:
- Comprendre les concepts de base des sessions en PHP
- Savoir comment créer, modifier et détruire une session
- Implémenter une fonctionnalité de connexion pour les utilisateurs avec des sessions
-
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 ?
- La durée de vie d’une session en PHP dépend des paramètres de configuration de la session. Par défaut, la durée de vie d’une session est définie à 24 minutes dans la plupart des installations PHP.
- 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).
- La durée de vie d’une session peut être définie en utilisant la fonction session_set_cookie_params() ou en modifiant les paramètres de configuration de PHP dans le fichier php.ini. Les paramètres qui contrôlent la durée de vie d’une session incluent :
- session.gc_maxlifetime : définit la durée de vie maximale d’une session avant que le nettoyage automatique de la session ne la supprime.
- session.cookie_lifetime : définit la durée de vie du cookie de session dans le navigateur de l’utilisateur.
-
Différentes fonctions (sessions) utilisées en PHP
-
Liste des fonctions (sessions)
- 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 :
-
La valeur de session
$_SESSION['id']
- Les identifiants de session
$_SESSION['id']
sont générés automatiquement par PHP lorsque la session est créée et sont stockés sur le serveur. - En PHP, pour connaître la valeur de la variable de session
$_SESSION['id']
, vous pouvez simplement l’appeler dans votre code. Par exemple, si vous voulez afficher la valeur de$_SESSION['id']
dans votre page web, vous pouvez ajouter le code suivant dans votre fichier PHP : - Cela affichera la valeur actuelle de la variable de session $_SESSION[‘id’]. Notez que pour utiliser cette ligne de code, vous devez vous assurer que la session a déjà été démarrée en utilisant la fonction session_start().
- Il est important de noter que si la variable de session
$_SESSION['id']
n’a pas encore été initialisée, vous obtiendrez une erreur « Notice: Undefined index » lors de l’appel de la variable. Pour éviter cette erreur, vous pouvez vérifier si la variable de session a été initialisée à l’aide de la fonction isset() avant d’appeler la variable. Par exemple : -
Applications
-
App01: 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.
-
App02: Suivi des visites précédentes sur une page
- Créez une page web qui permet à un utilisateur de saisir son nom et son prénom. Ensuite, stockez ces informations dans une session. Affichez les informations de l’utilisateur sur une autre page.
- Page 1 (form.php) :
- Page 2 (affiche.php) :
-
App03: Stocker un utilisateur connecté en session
- Créez une page web (connexion.php) qui permet à un utilisateur de saisir un nom d’utilisateur et un mot de passe. Ensuite, stockez ces informations dans une session. Sur une autre page (index.php), vérifiez si l’utilisateur est connecté ou non. S’il est connecté, affichez un message de bienvenue et un bouton de déconnexion (deconnexion.php). Sinon, redirigez l’utilisateur vers la page de connexion.
-
App04: un menu Bootstrap 5
- Créer un petit projet en PHP avec plusieurs pages, y compris une page « menu.php » contenant un menu Bootstrap 5 qui affiche les liens vers les différentes pages du projet ainsi que les options « Se connecter » ou « Se déconnecter« , en fonction de l’état de connexion de l’utilisateur. Si l’utilisateur est connecté, le menu affichera le lien « Se déconnecter » et redirigera vers la page « deconnexion.php« . Sinon, le lien « Se connecter » sera affiché et redirigera vers la page « connexion.php« . Les liens dans le menu doivent être mis à jour en conséquence de l’état de connexion de l’utilisateur.
- La page « connexion.php » doit inclure le menu et un formulaire de connexion réalisé avec Bootstrap 5 contenant deux champs de saisie et un bouton. La page « index.php » doit afficher un message de bienvenue à l’utilisateur connecté.
- En résumé, l’examen consiste à développer un petit projet PHP avec plusieurs pages, y compris une page de menu qui affiche des liens et des options de connexion en fonction de l’état de connexion de l’utilisateur. La page de connexion doit inclure le menu et un formulaire, tandis que la page d’index doit afficher un message de bienvenue à l’utilisateur connecté.
- Page 1 (connexion.php) :
- Page 2 (index.php) :
- Page 3 (deconnexion.php) :
- Page 4 (menu.php) :
<?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()
.
Il est important de noter que la durée de vie de la session doit être gérée avec prudence, car une durée de vie trop longue peut entraîner des risques de sécurité en cas de vol de session. Il est recommandé de limiter la durée de vie de la session à la durée minimale nécessaire pour le bon fonctionnement de l’application.
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 |
<?php
echo $_SESSION['id'];
?>
<?php
if(isset($_SESSION['id'])) {
echo $_SESSION['id'];
}
?>
Solution
<?php
session_start();
if(isset($_POST['submit'])){
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['prenom'] = $_POST['prenom'];
header("Location: affiche.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Formulaire de saisie</title>
</head>
<body>
<h1>Formulaire de saisie</h1>
<form method="post" action="">
<label for="nom">Nom : </label>
<input type="text" name="nom" id="nom" required><br><br>
<label for="prenom">Prénom : </label>
<input type="text" name="prenom" id="prenom" required><br><br>
<input type="submit" name="submit" value="Envoyer">
</form>
</body>
</html>
<?php
session_start();
echo "<h1>Bienvenue ".$_SESSION['nom']." ".$_SESSION['prenom']."</h1>";
?>
Solution
Solution
<?php
session_start();
if(isset($_POST['submit'])){
if(!empty($_POST['username']) && !empty($_POST['password'])){
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
header("Location: index.php");
exit();
}else{
echo "<script>alert('Remplir votre formulaire');</script>";
}
}
?>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
<div class="container-fluid w-25">
<h1 class="pb-3">Page de connexion</h1>
<form class="row g-3" method="POST">
<div class="row pb-2">
<input type="text" class="form-control" name="username" id="username" placeholder="Email">
</div>
<div class="row pb-2">
<input type="password" class="form-control" name="password" id="password" placeholder="Password">
</div>
<div class="row">
<button type="submit" name="submit" class="btn btn-primary mb-3">Se connecter</button>
</div>
</form>
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
<?php
session_start();
if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){
header("Location: connexion.php");
exit();
}
?>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
<h1>Bienvenue <?php echo $_SESSION['username']; ?> </h1>
<a href="deconnexion.php">Déconnexion</a>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
<?php
session_start();
session_destroy();
header("Location: connexion.php");
exit();
?>
<nav class="navbar navbar-expand-sm navbar-dark bg-primary navbarStyle">
<a class="navbar-brand" href="/">apcpedagogie.com</a>
<div class="navbar-collapse justify-content-end">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['password'])){
?>
<button type="button" id="signOut" class="btn btn-success d-none">Se déconnecter</button>
<?php
}else{
?>
<button type="button" id="signIn" class="btn btn-secondary">Se connecter</button>
<?php
}
?>
</div>
</nav>