Vous êtes sur la page 1sur 25

Programmation web Avancée

Partie II: PHP


Chap 5: Cookies & Sessions

Par O. Boutkhoum

Faculté des Sciences – El Jadida SMI S6, 2022/2023


Cookies
Introduction:
 Les cookies sont des petits fichiers texte qui conservent certains informations (paramètres) propres à
la navigation d’un visiteur sur le web:
◼ On peut par exemple s’en servir pour stocker (de manière temporaire) une information spécifique
sur l'utilisateur comme les préférences d'un site, un identifiant de session, un login, un compteur
de visites ou encore mesurer un temps de connexion.

◼ Ces fichiers sont enregistrés sur la machine cliente via le navigateur.

◼ Le principale objectif est de pouvoir réutiliser ces informations lors de la prochaine visite du visiteur
sur le même site.

◼ la fonction de gestion des cookies peut être activée ou désactivée au niveau du navigateur ou
simplement refusée par le visiteur.

◼ La taille d'un cookie est limitée à quelques kilo-octets .

2
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Création:
 PHP permet de placer des cookies sur l'ordinateur de la personne qui visite votre site web.
 Pour déclarer un cookie sur le poste client on utilise la fonction "setcookie()".
 Un cookie étant envoyé avec les entêtes HTTP, il ne peut pas être envoyé si une sortie a déjà eu lieu
(html, texte, ...):
◼ La fonction setcookie() doit obligatoirement être placée avant tout contenu HTML (généré ou pas
par le PHP), car les cookies se gèrent dans les en-têtes envoyées avant la page web.
✓ A chaque requête vers le serveur, le navigateur va ✓ Exemple de réponse HTTP complète:
renvoyer au serveur tous les cookies stockés, avec
l'entête Cookie HTTP/1.0 200 OK
Content-type: text/html
GET /sample_page.html HTTP/1.1
Set-Cookie: NomCookie1=Val1
Host: www.example.org
Set-Cookie: NomCookie2=Val2
Cookie: NomCookie1=Val1; NomCookie2=Val2
[contenu de la page]
3
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Vérification via le navigateur

4
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies

5
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies

6
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Vérification via le navigateur

7
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Création:
 La fonction setcookie() peut accepter jusqu’à sept arguments; mais en générale, on lui donne trois
paramètres, dans l'ordre suivant :
◼ le nom du cookie; => obligatoire
◼ la valeur du cookie;
◼ la date d'expiration du cookie, sous forme de timestamp (ex. : 1090521508 ).

Exemple:
<?php
$nom=’’nomcookie’’;
$val=’’valeurcookie’’;
setcookie($nom, $val, time()+3600); // expire dans une heure
/* Nous utilisons la fonction time() sans lui passer d'argument pour récupérer la valeur du timestamp actuel. Ensuite, nous lui
ajoutons un certain nombre de secondes pour définir la date d’expiration des cookies. */
?>

8
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Récupérer la valeur d’un cookie:
 Pour récupérer la valeur d’un cookie, nous allons utiliser la variable superglobale $_COOKIE.
 $_COOKIE est un tableau associatif contenant les valeurs des différents cookies définis dans un script.
On peut accéder à la valeur d'un cookie en particulier en renseignant le nom du cookie en clef de ce tableau.

Exemple:

<?php
echo $_COOKIE[“nom du cookie“];
?>

9
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Modification ou Suppression d’un cookie:
 Pour modifier la valeur d’un cookie, il suffit d’utiliser à nouveau setcookie() en réécrivant le cookie à
l’identique et en changeant simplement la valeur donnée.

 Pour supprimer un cookie, il suffit de donner une date antérieure à la date actuelle à celui-ci.
Exemple de modification: Exemple de suppression:

<?php <?php
setcookie("couleur",“rouge");
// Commencer par supprimer la valeur du cookie
// la couleur est rouge
echo $_COOKIE["couleur"]; unset($_COOKIE[“nomcookie"]);
setcookie("couleur","blue"); /* Puis désactiver le cookie en lui fixant une date
d'expiration dans le passé */
// la couleur devienne bleu
echo $_COOKIE["couleur"]; setcookie(“nomcookie","val_cookie",time()-1);
?> ?>

10
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Sécuriser son cookie contre la faille XSS (cross-site scripting ):
 Activez l’option httpOnly (7ème paramètres) sur le cookie pour diminuer le risque d’injection de contenu.
➢ httpOnly : Indique si le cookie ne doit être accessible que par le protocole HTTP (sa valeur doit être true):

➢ Le cookie sera inaccessibles aux langages de scripts comme JavaScript (Document.cookie)

Exemple : domain httpOnly

<?php
setcookie(“MonCookie",“ValeurCookie“, time() + 365*24*3600, null, null, false, true);
?>

Path sur le serveur


Secure (avec https ou non)

11
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies
Exemple 1: Compteur de visite simple avec les cookies.
- Afficher combien de fois un utilisateur a visité un site (pas combien d’utilisateur qui ont visité ce site)).

<?php
if (isset($_COOKIE['compteur']))
{
$valeur = $_COOKIE['compteur'] + 1;
$message = "Vous êtes déjà venu ".$_COOKIE['compteur']." fois <br/>\n";
}
else
{
$message = "Je vous met un petit cookie<br/>\n";
$valeur = 1;
}
setCookie("compteur", $valeur); // Création ou mise à jour du cookie
echo $message;
?>
12
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies & Fichier
Exemple 2: Compteur de visite utilisant les cookies et les fichiers (ne compte qu'une seule fois une
personne)

Il peut arriver qu'on ait besoin de savoir si un cookie est présent sur l'ordinateur de l'internaute pour agir en
conséquence.

Par exemple, un compteur de visites (pour une actualité) ne sera pas incrémenté si l'internaute a déjà visité
la page en question : un cookie est donc placé à la première visite de la page et on vérifiera sa présence pour
les visites ultérieures.
On place un cookie à la première lecture de la page, si celui-ci n'existe pas :

13
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Cookies & Fichier
Exemple 2 (suite):

un cookie à la première
lecture de la page

14
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Principe:
 Une session est un mécanisme technique permettant de sauvegarder temporairement sur le serveur
des informations relatives à un internaute:
◼ les sessions sont stockés directement sur le serveur (par rapport aux cookies qui sont conservés sur
l'ordinateur client): plus de sécurité et de contrôle de la connexion de l’utilisateur.
◼ le serveur assigne au client un identifiant unique appelé identifiant de session, ou SID.
◼ le serveur détruit lui même la session au bout d'un certain temps si la session n'a pas été renouvelée
(afin de libérer les ressources).

15
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Démarrer une session:
 Session_start() : crée une session ou restaure une session précédemment stockée sur le serveur:
◼ Elle vérifie l'état de la session courante. Si elle est inexistante, alors le serveur la crée sinon il la
poursuit.

◼ À mettre dans toute page participante à une session

 Remarques:
◼ L'ouverture d'une session doit obligatoirement apparaître avant toute sortie/affichage du script PHP ou
de balises HTML.

◼ L’utilisation d’une session ne nécessite pas forcément d’authentification.

16
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Exploiter une session
 À la manière des cookies, les variables de sessions sont accessibles directement via un tableau super
global : $_SESSION.
 $_SESSION permet l’enregistrement de variables dans la session :
◼ $_SESSION["nom"]=‘test’ ajoute ou modifie une variable à/de la session en cours
◼ $_SESSION["nom"] accède à la valeur d’une variable de la session en cours:

<?php
if (isset($_SESSION['nom'])) {
echo 'Bonjour '.$_SESSION['nom']
}
?>

◼ session_id() est utilisé pour récupérer ou définir l'identifiant de session pour la session courante.
◼ session_destroy() détruit la session en cours

17
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Destruction propre et complète d'une session

<?php
// Démarrage ou restauration de la session
session_start();
// Réinitialisation du tableau de session
// On le vide intégralement
$_SESSION = array(); // unset($_SESSION['nomvariable']);
// Destruction de la session
détruire une variable de session
session_destroy();
// Destruction du tableau de session
unset($_SESSION);
?>
18
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Exemple d’utilisation:
 Il s’agit tout simplement d’un compteur qui est incrémenté à chaque appel de la page (si la variable de
session n’existe pas, c’est qu’il s’agit d’une nouvelle session et le compteur est initialisé à la valeur 1).
<?php Session1.php
session_start();
if (!isset($_SESSION['cpt']))
{ $_SESSION['cpt’]=1;
$_SESSION['login']="MonLogin";
}else $_SESSION['cpt']++;
echo "bonjour ".$_SESSION['login']." : !<br>\n";
echo "Vous avez vu cette page ".$_SESSION['cpt']." fois <br/>\n";
echo "Le SID courant est : " . session_id();
echo "<br/> <a href=\"session2.php\">vers session2.php</a>";
?>
 N.B: Pour gérer les sessions de façon optimale, il est possible de configurer PHP à l’aide des nombreuses
options offertes par le fichier de configuration php.ini.
- Voir le lien: https://www.php.net/manual/fr/session.configuration.php
19
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Exemple d’utilisation:
 Le SID (session ID) ne change pas (unique) si la session est toujours valide
<?php Session2.php
session_start();
if (!isset($_SESSION['cpt']))
{ $_SESSION['cpt’]=1;
$_SESSION['login']="MonLogin";
}else
$_SESSION['cpt']++;
echo "bonjour ".$_SESSION['login']." : !<br>\n";
echo "Vous avez vu cette page ".$_SESSION['cpt']." fois <br/>\n";
echo "Votre SID est toujours : " . session_id();
echo "<br/> <a href=\"session1.php\">Retour a session1.php</a>";
?>

 NB: n’oubliez pas de fermer les sessions si vous manipulez plusieurs fichiers php contenant des
sessions lors des différents tests.
20
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Authentification: 2 méthodes d’authentification
1. Par HTTP : en utilisant le système d’identification, et la capacité des navigateurs d’ouvrir une fenêtre de
connexion

<?php authentifier1.php
if ($_SERVER['PHP_AUTH_USER']!= "test" || $_SERVER['PHP_AUTH_PW']!="123") {

header('WWW-Authenticate: Basic realm="description de la zone protégée"');

L'entête HTTP de réponse Type d'authentification (commun)


} else {
echo "<p>Bonjour, " .$_SERVER['PHP_AUTH_USER’]."</p>";
echo "<p>Votre mot de passe est " .$_SERVER['PHP_AUTH_PW'] ."</p>";
}
?>
2. Par un formulaire (saisir pseudo et mot de passe) et en se basant sur les sessions

21
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Authentification via un formulaire:

authentification-form.html

22
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Authentification via un formulaire:

authentification.php

23
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification
Authentification via un formulaire:

Logout.php

24
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
Sessions et authentification

TP récapitulatif

25
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida

Vous aimerez peut-être aussi