Académique Documents
Professionnel Documents
Culture Documents
Introduction
Pour sécuriser les données qui transitent via les différentes pages du site web d’un même
visiteur et assurer leurs cohérence nous pouvons utiliser les sessions
1.Définition :
Une session est une période entre un début et une fin d'une activité. Par exemple pour
Internet, j'ouvre mon navigateur sur une url de site web et je referme le navigateur : j'ai
ainsi réalisé une session que j'ai commencée, puis terminée. Par extension, on associe à
une session un ensemble de valeurs définies de manière transparente pour le visiteur et
que le serveur conserve de page en page comme cookies. Le maniement des valeurs de
sessions est assez simple en PHP, on peut stocker presque tout dans une variable de
session : un chiffre, un texte, voire un objet
– Une session est plus ou moins similaire aux cookies HTTP – Les données d'une session
sont cependant stockées sur le serveur et non chez le client, ce qui l'empêche de pouvoir
les modifier manuellement, comme il peut le faire pour un cookie
Par exemple lorsqu'on désire conserver une variable entre plusieurs pages, nom du
visiteur rentre sur une page un identifiant et un mot de passe, je lui affiche des liens que je
n'affiche pas s'il n'y a pas eu cette "connexion" préalable... Cela permet de réserver des
liens à des gens, pour mon exemple, qui ont une inscription à mon site.
Les sessions ont pour rôle :
1 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
1. Ouverture d’une session dans chaque page ayant accès aux données à l’aide de la
fonction session_start() de syntaxe : boolean session_start().
Dans la plupart des cas, c’est-à-dire quand les sessions utilisent des cookies, cet appel
est la première instruction du script.
2. Chaque utilisateur se voit attribuer un identifiant de session, qui est une suite de 26
caractères aléatoires. Lié à la session en cours, et donc différent lors d’une autre
connexion, cet identifiant est transmis d’une page à une autre de deux manières
différentes, soit en étant écrit dans un cookie sur le poste client, soit en étant ajouté à
l’URLde la page cible d’un lien.
3. Définition des variables de session, c’est-à-dire des valeurs qui seront accessibles dans
toutes les pages du site qui utilisent la fonction session_start(). Cela se réalise en utilisant
le tableau superglobal $_SESSION, dont les clés sont les noms des variables. À la
différence des cookies, les noms et valeurs des variables sont stockés sur le serveur et
non sur le poste client. Les variables sont généralement stockées dans le dossier /tmp du
serveur, mais il vous appartient de vérifier auprès de votre hébergeur le nom du dossier de
stockage, certains d’entre eux vous obligeant à créer vous-même sur le serveur un dossier
nommé, par exemple, sessions. En l’absence d’un tel dossier, les sessions ne
fonctionnent pas. Les fichiers contenant les données ont pour nom l’identifiant de session,
auquel est ajouté le préfixe sess_. Ils ont la même structure qu’un fichier texte.
4. Lecture des variables de session dans chaque page en fonction des besoins à l’aide du
tableau superglobal $_SESSION.
session_destroy();
2 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
Attention à commencer la session en tête du fichier; avant tout Doctype ou autre code
HTML qui sera envoyé au client.
Ceci fait, le serveur crée "chez lui" un fichier dans lequel il écrira les variables et leurs
valeurs. La session est définie par un identifiant qui est unique et aléatoire, c'est la
variable cachée qui est transmise de page en page de manière transparente.
La session est conservée sur le serveur tant qu'elle n'a pas reçu un ordre de destruction
ou bien que le client n'a pas fermé son navigateur : elle expire alors au bout d'un certain
temps (par défaut 1h).
Nous avons évoqué les variables de session plus haut, qu'en est-il de leur déclaration ?
Pour déclarer une variable de session (ici vide), il suffit d'exécuter :
<?php
$_SESSION['prenom'] = '';
?>
C'est aussi simple que cela. (Cette variable ne pourra exister en tant que variable de
session que si session_start(); est exécuté au préalable.)
on peut faire des tests conditionnels sur ces variables :
<?php
if ((isset($_SESSION['login'])) && (!empty($_SESSION['login'])))
{
// le login a été enregistré dans la session, j'affiche le lien du profil
echo '<a href="profil.php" title="Accédez à votre profil">Mon profil</a>';
}
else
{
// pas de login en session : proposer la connexion
echo '<a href="connexion.php" title="Accès à la page de
connexion">Connexion</a>';
}
?>
3 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
ici, je dis : si la valeur de variable de session $_SESSION['login'] est définie et non vide
(isset et !empty) alors j'affiche le lien "profil".
Attention : une variable définie et une variable vide ne sont pas du tout les mêmes choses... Je peux
définir une variable sans pour autant la remplir (cf. plus haut : $_SESSION['prenom'] est définie,
mais vide). L'inverse n'est pas pareil : si je dis explicitement :
<?php
$_SESSION['nom'] = 'Meriem';
?>
(On verra le résultat dans le code source). On peut supprimer une variable de session en la
détruisant :
<?php
// Suppression d'une variable de session
unset($_SESSION['bidule']);
?>
4 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
echo "<ul>\n";
foreach($_SESSION as $cle => $valeur)
{
echo " <li><strong>".ucfirst($cle)." : </strong><em>".
$valeur."</em></li>\n";
}
echo "</ul>\n";
?>
On a ainsi de quoi afficher toutes les variables si besoin, à n'importe quel moment je peux faire
appel à $_SESSION['race']
if (isset($_POST['submit']))
{
// bouton submit pressé, je traite le formulaire
$login = (isset($_POST['login'])) ? $_POST['login'] : '';
$pass = (isset($_POST['pass'])) ? $_POST['pass'] : '';
5 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
$_SESSION['login'] = "Matthieu";
$_SESSION['password'] = "NewsletTux";
echo '<a href="accueil.php" title="Accueil de la
section membre">Accueil</a>';
}
else
{
// une erreur de saisie ...?
echo '<p style="color:#FF0000; font-
weight:bold;">Erreur de connexion.</p>';
}
}; // fin if (isset($_POST['submit']))
if (!isset($_POST['submit'])))
{
// Bouton submit non pressé j'affiche le formulaire
echo '
<form id="conn" method="post" action="">
<p><label for="login">Login :</label><input
type="text" id="login" name="login" /></p>
<p><label for="pass">Mot de Passe :</label><input
type="password" id="pass" name="pass" /></p>
<p><input type="submit" id="submit" name="submit"
value="Connexion" /></p>
</form>';
}; // fin if (!isset($_POST['submit'])))
?>
Explication de l'exemple 2
J'ai choisi d'effectuer le traitement du formulaire avant son affichage pour pouvoir afficher (en gras,
rouge dans cet exemple) un message d'erreur puis ré afficher le formulaire ensuite.
Ainsi lorsque le lien Accueil apparaît, je sais :
•que la personne est correctement identifiée,
•que mes variables de session sont non vides.
Autrement, mes variables restent vides. Mais qu'en est-il de la page accueil.php ? Si un visiteur mal
intentionné rentre son adresse directement dans le navigateur pour contourner le formulaire ?
Heureusement, il y a moyen de se protéger. Voici le code de accueil.php :
<?php
session_start();
if ((!isset($_SESSION['login'])) || (empty($_SESSION['login'])))
{
// la variable 'login' de session est non déclaré ou vide
echo ' <p>Petit curieux... <a href="index.php"
title="Connexion">Connexion d\'abord !</a></p>';
exit();
}
?>
6 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
Exemple concret
Testsession.php
<?php
session_start();
$_SESSION['pseudo']="Administrateur";
$_SESSION['password']="stagiaire123";
?>
<!doctype html>
<HTML>
<head>
<meta charset="utf-8"/>
<title>AUTHENTIFICATION</title>
</head>
<body>
<?php include 'entete.php';?>
<h1>Création de la session :</h1>
<div style="border:solid 2px red;margin:10px 10px 10px 10px;padding:10px;">
<p> le test des sessions</p>
</div>
<a href="page.php">page suivante</a>
7 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
page.php
<?php session_start();?>
<!Doctype html>
<html>
<head>
<meta charset="UTF-8">
<TITLE>Login</TITLE>
<link rel="stylesheet" type="text/css" href="fich.css"/>
</head>
<body>
<?php include 'entete.php';?>
<div class="page"><P>Bienvenu vous êtes<?php echo $_SESSION['pseudo'];?></p>
</div>
<div class="page">
<form name="bt" method="POST" action="logout.php">
<input name="bt1" type="submit" value="se déconnecter"/></form>
</div>
<?php include 'footer.php';?>
</body>
</html>
logout.php
<?php
session_start();
session_unset();
session_destroy();
?>
8 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
<!Doctype html>
<html>
<head>
<meta charset="UTF-8">
<TITLE>Logout</TITLE>
<link rel="stylesheet" type="text/css" href="fich.css"/>
</head>
<body>
<?php include 'entete.php';?>
<div style="width:80%;height:150px;background-color:cyan;padding:5px;margin:10px 10px 10px
10px;
font-family:arial;font-size:14px;">
<P>Merci pour votre visite </p>
</div>
<?php include 'footer.php';?>
</body>
</html>
entete.php
<?php
echo "<header style='width:80%;height:50px;background-color:cyan;padding:5px;margin:10px
10px 10px 10px;
font-family:arial;font-size:14px;border: solid 1px blue;'>BEST_LIB notre meilleur libraire
</header>";
?>
footer.php
<?php echo "<footer style='width:80%;height:25px;background-
color:cyan;padding:5px;margin:10px 10px 10px 10px;
font-family:arial;font-size:14px;border: solid 1px
blue;'>copyright©2023.Tous les droits sont réservés </footer>";
?>
9 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
Les Cookies
Qu'est-ce qu'un cookie ?
C’est un petit fichier texte (65 Ko maxi) stocké sur le disque dur du visiteur du site
• On peut y sauvegarder plusieurs infos concernant ce visiteur et les réutiliser lors
de sa prochaine visite
• Par exemple, on pourrait très bien stocker dans ce cookie le nom du visiteur et par
la suite, afficher son nom à chaque fois qu'il se connectera sur le site (ceci bien
sur, s'il n'efface pas les cookies de son disque dur)
• Ceci n'est possible que si le visiteur a entré lui-même ses informations dans un
formulaire sur le site
Où sont placés les cookies ?
– Cela dépend du navigateur que vous utilisez
sur Microsoft Edge
10 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
11 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
1 .Création d’ un cookie :
syntaxe :
setcookie(string $name, string $value = "", array $options = []): bool
setcookie() : définit un cookie qui sera envoyé avec le reste des en-têtes HTTP.
Comme pour les autres en-têtes, les cookies doivent être envoyés avant toute autre sortie
(c'est une restriction du protocole HTTP, pas de PHP). Cela vous impose d'appeler cette
fonction avant toute balise <html> ou <head> et aussi des caractères d'espacement blanc.
Une fois que les cookies ont été placés, ils seront accessibles lors du prochain
chargement de page dans le tableau $_COOKIE. Les valeurs des cookies peuvent aussi
exister dans la variable $_REQUEST.
la syntaxe :
boolean setcookie(string nom_cookie,[string valeur, integer datefin, string chemin,
string domaine, integer securite] )
La fonction setcookie() renvoie une valeur booléenne TRUE qui permet de contrôler si
l’écriture du cookie a eu lieu et FALSE en cas de problème
Les paramètres de la fonction setcookie() sont les suivants :
• nom_cookie est une chaîne définissant le nom du cookie. Ce nom obéissant aux mêmes
règles de nommage que les variables, il faut éviter les caractères spéciaux. Ce nom sert à
identifier le cookie pour les opérations de lecture de leur contenu.
• valeur contient la valeur associée au cookie. Il s’agit d’une chaîne de caractères, même
pour un nombre. Il y a donc lieu d’effectuer au besoin un transtypage pour effectuer des
calculs avec cette valeur.
• datefin est un entier qui permet de stocker un timestamp UNIX exprimé en seconde
définissant la date à partir de laquelle le cookie n’est plus utilisable. Si ce paramètre est
omis, le cookie n’est valable que pendant le temps de connexion du visiteur sur le site.
Pour définir cette date, vous utilisez le plus souvent la fonction time(), qui donne le
timestamp en cours, auquel vous ajoutez la durée désirée par un nombre de seconde.
Pour une durée de validité de vingt-quatre heures, par exemple, vous écrivez time()
+86400.
• chemin définit dans une chaîne le chemin d’accès aux dossiers qui contiennent les
scripts autorisés à accéder au cookie. Les scripts contenus dans les sous-dossiers
éventuels de ce dossier ont également accès au cookie. Si la valeur est /, le cookie est
lisible sur l’ensemble du domaine domaine. Si la valeur est /repertoire/, le cookie est
uniquement lisible dans le répertoire /repertoire/ ainsi que tous ses sous répertoires
(/repertoire/sousrep/ par exemple) du domaine domaine. La valeur par défaut est le
répertoire qui contient le script ayant créé le cookie.
• domaine définit le nom entier du domaine à partir duquel vous pouvez accéder au
cookie. Vous écrivez, par exemple, www.mondomaine.com, et non mondomaine.com
seulement. Lorsque ce nom de domaine est le même que celui qui a créé le cookie, ce qui
est le cas le plus fréquent, vous pouvez omettre ce paramètre.
• securite est une valeur de type boolean qui vaut TRUE (ou la valeur 1) si le cookie doit
être transmis par une connexion sécurisée (avec une adresse du type
https://www.mondomaine.com) et FALSE (ou la valeur 0) dans le cas contraire, qui est la
valeur par défaut.
12 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
Exemple :
<?php
/* on définit une durée de vie de notre cookie (en
secondes), donc un an dans notre cas*/
$temps = 365*24*3600;
/* on envoie un cookie de nom pseudo portant la valeur
Mobile*/
setcookie ("pseudo", "Mobile", time() + $temps);
?>
exemple :
Écriture de cookies à partir d’un tableau
$tabcook=array("prenom"=>"Ahmed",
"nom"=>"Mebarka","ville"=>"Alger");
foreach($tabcook as $cle=>$valeur) {
setcookie("client2[$cle]",$valeur,time()+7200);
}
?>
2.Lecture des cookies
Les données stockées dans les cookies ne sont récupérables dans la page qui les a
créés que lors d’un rechargement de cette page. Les autres pages du site ont un accès
immédiat aux cookies dès leur chargement. Cela procure un moyen de passage
d’information d’une page à l’autre, même s’il y en a de plus commodes. Il existe
deux manières de récupérer la ou les valeurs d’un cookie, dans une variable de même
nom que celui attribué au cookie ou dans le tableau associatif superglobal
$_COOKIE.
Dans le cookie simple suivant :
setcookie("nom","Hiba",time()+1000) vous récupérez l’information dans la
variable $_COOKIE["nom"]. Pour le cookie sous forme de tableau suivant :
vous lisez toutes les données dans le tableau $_COOKIE["achat"]. Il s’agit d’un
tableau à deux dimensions, que vous pouvez parcourir à l’aide d’une boucle
foreach :
foreach($_COOKIE["achat"] as $cle=>$valeur)
{
echo "Le cookie nommé: $cle contient la valeur : $valeur
";
}
13 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
?>
<!Doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Page multilingue</title>
<link rel="stylesheet" type="text/css" href=""/>
</head>
<body>
<ul><li><a href="?pays=fr">Francais </a></li><li><a href="?pays=en">Anglais
</a></li><li><a href="?pays=al">Allemand </a</li></ul>
<br>
<?php
switch($pays){
case 'fr':echo"<p>Bonjour le monde </p><p>A Bientôt </p>";break;
case 'en':echo"<p>Good moorning </p><p>Good Bey </p>";break;
case 'al':echo"<p>Gutten morgen </p><p>Auf wiedersehen </p>";break;
}
?>
</body>
</html>
14 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.
La facture Globale
Nom et prénom client : Merdassi Mohamed
Exercice 2 :
Nous voulons contrôler un utilisateur s’ il a voté plusieurs fois et ceci en conservant
les données suivantes nom , le choix du vote et l ‘empêcher de voter une autre fois
et ceci en utilisant des cookies ; un message doit être affiché s’il a déjà voté sinon
Afficher les résultats du vote
15 / 15