Vous êtes sur la page 1sur 15

CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.

Chapitre : Les sessions PHP

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

2. A quoi peut servir une session ?

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 :

• Permettre à plusieurs pages de partager les mêmes données


• Conserver plusieurs données lors d’une session
• Ranger les données de la session sur le serveur
• Sécuriser le passage des données vers le serveur en donnant un identifiant à la
session et en cryptant l’identifiant
• Disposer de plusieurs sessions et donner un nom à chacune

1 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.

3. Le mécanisme des sessions :

L’utilisation du mécanisme des sessions obéit aux étapes générales suivantes :

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.

5. Fermeture de la session après destruction éventuelle des variables de session par .

session_destroy();

2 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.

3.1. L’ OUVERTURE de sessions en php

Une session s'ouvre dans une balise PHP par :


<?php
session_start();
?>

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';
?>

alors PHP va me définir la variable et me la remplir. La définition sera implicite.


La durée de vie d ‘ une session
Une session est, comme son nom l'indique, une session de navigation
– Elle commence donc lors de l'accès à une page les utilisant et se termine à la fermeture du
navigateur du client
– Une fois la session terminée, elle est détruite ainsi que toutes les données qu'elle contient
– Elle ne doit donc contenir que des données temporaires
– Cependant, la session possède aussi un délai d'expiration
• Celui-ci peut être modifié dans la configuration du serveur (directive session.gc_maxlifetime),
mais vaut généralement une trentaine de minutes
• Une fois ce délai dépassé, la session est supprimée

3.2 Gestion des variables de session :


Depuis PHP 4.2.0, le simple fait de faire un lien a href vers une autre page d'extension .php qui
contient également un session_start(); suffit à conserver les variables.
La variable superglobal $_SESSION est un tableau (array) typé comme suit : index => valeur. On
peut donc lui appliquer toutes les fonctions d’un tableau et afficher sa structure grâce à :
<?php
print_r($_SESSION);
?>

(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.

Exemple 1 : affichage des variables de session


<?php
session_start();
$_SESSION['prenom'] = "Matthieu";
$_SESSION['age'] = "inconnu";
$_SESSION['race'] = "humain";

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']

Exemple 2 : cas d'un formulaire de connexion


ce script permet par une page de s'identifier, et l'accès à toutes les autres pages sera tributaire de
cette identification.
Le principe est, somme toute, assez simple :
•J'initialise ma session
•J'initialise mes variables
•J'affiche mon formulaire, ou j'effectue son traitement : dans un cas, mes variables de session seront
vides, dans l'autre, elles ne seront remplies que si le traitement retourne un résultat correct.
•Enfin, si le formulaire de connexion est validé, j'affiche un lien pour passer à la page suivante en
"mode connecté". Autrement, pas d'accès aux autres pages.
Code de la page index.php (je prends l'exemple de la protection des pages d'un dossier, l'index étant
la page affichée par défaut, j'ai pensé judicieux d'y mettre mon formulaire d'accès; cas d'un doctype
XHTML).
<?php
session_start();
$_SESSION['login'] = '';
$_SESSION['password'] = '';

if (isset($_POST['submit']))
{
// bouton submit pressé, je traite le formulaire
$login = (isset($_POST['login'])) ? $_POST['login'] : '';
$pass = (isset($_POST['pass'])) ? $_POST['pass'] : '';

if (($login == "Matthieu") && ($pass == "NewsletTux"))


{

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.

3.3 La fin de session


La fin d'une session est la destruction du tableau de variables $_SESSION. Je préfère, à titre
personnel, suivi de session_destroy();
toutes les variables de sessions doivent être détruite avec session_unset();
réécrire ce tableau puis le détruire. Voyez ci-dessous :
<?php
// Destruction de la session : manière simple
session_destroy();

// Destruction de session : ma manière (utilisez l'une ou l'autre)


$_SESSION = array(); // on réécrit le tableau
session_destroy(); // on détruit le tableau réécrit
?>

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.

<?php include 'footer.php';?>


</body>
</HTML>

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&copy;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

Sur mozilla firefox

10 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.

Sur google chrome

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
";
}

Pour récupérer la valeur "livre",


par exemple, vous écrivez : $_COOKIE["achat"]["premier"]

13 / 15
CHAPITRE : LES SESSIONS EN PHP . Réalisé par Mme Medjerab.

Exemple changement de langues avec les cookies


<?php
if(isset($_GET['pays'])){
$pays=$_GET['pays'];
}elseif(isset($_COOKIE['pays'])){
$pays=$_COOKIE['pays'];
}else{
$pays='fr';
}
$expiration=365*24*3600;
setcookie("pays",$pays,time()+$expiration);

?>
<!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.

TP : Les sessions et les cookies


Exercice 1 :
Nous voulons gérer et calculer le montant globale des produits choisi et rangé dans le
panier en utilisant les variables de sessions comme suit ;
les données du paniers sont saisi à partir d’un formulaire

La facture Globale
Nom et prénom client : Merdassi Mohamed

Le code article Désignation Quantité Prix Unitaire Montant (DA)


article
120 Drap 1 place 2 2500.00 5000.00
imprimé
350 Couette 1place 3 3500.00 10500.00
145 Couvre lit 2 1 7500.00 7500.00
places
Montant de la facture 23000.00

Les résultats peuvent êtres stocké dans un fichier ‘panier.txt ‘

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

Vous aimerez peut-être aussi