PHP
Cookies et Sessions
Laurent d’Orazio
Université de Rennes 1 – IRISA
2022-2023
Plan
I. Contexte
II. Cookies
III. Sessions
2022/2023 PHP - Cookies et Sessions 2
Plan
I. Contexte
II. Cookies
III. Sessions
2022/2023 PHP - Cookies et Sessions 3
Mémorisation des données entre les pages (1)
• Exemple
• Récupération de l’identifiant d’un utilisateur
• Vérification / utilisation de son identifiant
• Méthodes de transfert get et post
• Transfert de données entre pages
• Echange de l'identifiant de l'utilisateur à chaque fois
• Lourdeur du procédé
• Problème de sécurité
2022/2023 PHP - Cookies et Sessions 4
Mémorisation des données entre les pages (2)
• Objectif
• « Variables globales »
• Zone d'échange entre différentes pages
• Mécanismes
• Côté client
• Cookies
• Côté serveur
• Sessions
2022/2023 PHP - Cookies et Sessions 5
Plan
I. Contexte
II. Cookies
A. Définition et principe
B. Cas d’usage
C. Fonctionnement
D. Caractéristiques
E. Utilisation
F. Avantages et inconvénients
III. Sessions
2022/2023 PHP - Cookies et Sessions 6
A. Définition et principe
• Fichier (de petite taille) de données écrit par un script du serveur stocké sur le client
• Ordre du serveur en réponse à une requête HTTP
• Reçu et interprété par le navigateur
• Données stockées sous forme texte sur la machine
• Mémorisation de l'information entre deux visites
• A chaque requête HTTP, le(s) cookie(s) est/sont transmis
• Seuls les cookies du site concerné sont envoyés
2022/2023 PHP - Cookies et Sessions 7
B. Cas d’usage
• Exemples
• Identifiant d'un utilisateur (déconseillé)
• Préférences / options sur le site
• Pages visitées par un client
2022/2023 PHP - Cookies et Sessions 8
C. Fonctionnement
2022/2023 PHP - Cookies et Sessions 9
D. Caractéristiques (1)
• Caractéristiques :
• Nom
• Valeur
• Date de validité
• Chemin
• Domaine/serveur
• Option secure
• Transmission uniquement si connexion HTTPS si valeur true
• Option HTTPOnly
• Accessibilité uniquement par protocole HTTP si valeur true
2022/2023 PHP - Cookies et Sessions 10
D. Caractéristiques (2)
• Exemple
• Nom utilisateur
• Valeur [Link]
• Date de validité Sunday, 07-Oct-18 23:12:40 GMT
• Chemin null
• Domaine/serveur null
• Option secure false
• Option HTTPOnly true
2022/2023 PHP - Cookies et Sessions 11
E. Utilisation
Accès
• Syntaxe
• $_COOKIE
• Exemple
• $_COOKIE("my_cookie")
2022/2023 PHP - Cookies et Sessions 12
E. Utilisation
Initialisation
• Syntaxe
setcookie(<nom>,<valeur>,<validité>,<chemin>,<domaine>,<secure>,<httponly>)
• Exemple
setcookie("mon_cookie",
"valeur du cookie",
time()+3600,
null,
null,
false,
true
);
2022/2023 PHP - Cookies et Sessions 13
E. Utilisation
Effacement
• Méthode 1
• setcookie avec une valeur vide
• Méthode 2
• Affectation avec les mêmes paramètres
2022/2023 PHP - Cookies et Sessions 14
F. Avantages et inconvénients (1)
• Avantages
• Conservation des données entre deux visites
• Contrôle sur la durée de vie des données
• Mort programmée par le serveur
• Possibilité de destruction des données par le client
• Nettoyage par le navigateur
2022/2023 PHP - Cookies et Sessions 15
F. Avantages et inconvénients (2)
• Inconvénients
• Possibilité de refus des cookies par le client
• Quantité de données stockées limitée*
• Taille : 4Ko par cookie
• Nombre
• 300 cookies par navigateur
• 20 cookies par serveur (pour un même client)
• Problème de sécurité
• Echange de données entre client et serveur
• Par défaut, aucune sécurisation
• Possibilité de sécuriser le transfert
• Données stockées chez le client
• Possibilité de récupérer le cookie d'un autre *Possibilité d’utilisation des cookies comme clé d’entrée
à une table dans un SGBD et donc transmission de plus
de données
2022/2023 PHP - Cookies et Sessions 16
Plan
I. Contexte
II. Cookies
III. Sessions
A. Principes
B. Fonctionnement
C. Utilisation
D. Avantages et inconvénients
2022/2023 PHP - Cookies et Sessions 17
A. Principes
• Correspond à une visite d'un utilisateur
• Identifiant = SID (Session IDentifier)
• Identifiant attribué aléatoirement au début de la visite
• Identifiant transmis à chaque page durant la visite
• L'identifiant permet d'échanger des données entre pages
• Zone de stockage attribuée pour l'identifiant sur le serveur
• Une page peut déposer des informations dans la zone
• Une autre peut récupérer ces informations dans la zone
• L'identifiant doit être transmis entre les pages
• Plusieurs méthodes de transmission
2022/2023 PHP - Cookies et Sessions 18
B. Fonctionnement
2022/2023 PHP - Cookies et Sessions 19
C. Utilisation
Ouverture de session
• Fonction session_start
• Création d'un nouvel SID unique de forme aléatoire
• Si l'utilisateur n'en a pas
• Sinon, récupération du SID de l'utilisateur
• Récupération des données de la session à partir du SID
• Procédure totalement automatique
• Remarque
• Récupération de l’identifiant de session avec session_name()
2022/2023 PHP - Cookies et Sessions 20
C. Utilisation
Stockage et manipulation de données
• Tableau associatif _SESSION
• Sauvegarde des informations
• Association variable-valeur
• Enregistrement
$_SESSION["nom_variable"] = valeur;
• Lecture des informations stockées
$_SESSION["nom_variable"];
2022/2023 PHP - Cookies et Sessions 21
C. Utilisation
Suppression d’une session
• Syntaxe
session_destroy();
• Fonctionnement
• Données de la session détruites
• SID rendu invalide
• Remarque
• Utilisation de ces commandes avant tout affichage
• Avant balise <html>
• Avant toute commande echo
2022/2023 PHP - Cookies et Sessions 22
C. Utilisation
Test définition d’un paramètre
• Syntaxe
isset($_SESSION["nom"])
• Fonctionnement
• Retourne vrai si paramètre défini, faux sinon
2022/2023 PHP - Cookies et Sessions 23
D. Avantages et inconvénients (1)
• Avantages
• Application dans tous les cas (pas possibilité de refus du client)
• Quantité de données stockées non limitée
• Sécurité
• Pas d'échange de données avec le client
• Données uniquement stockées sur le serveur
• Données consultables seulement à partir du SID
2022/2023 PHP - Cookies et Sessions 24
D. Avantages et inconvénients (2)
• Inconvénients
• Durée de vie limitée au temps de la visite
• Impossibilité de conservation des données entre deux visites
• Possibilité de fermeture de la session pendant la visite
• Durée de vie de la session programmée
• Réinitialisation du compteur de vie à chaque accès au site
• Aucun accès pendant une durée donnée
• ⇒ fermeture de la session
2022/2023 PHP - Cookies et Sessions 25
E. Exemple
• Tracer la connexion d’un utilisateur
//Activation du mécanisme de session
session_start();
//Si début est vide ou non défini, c'est la première fois et on enregistre l'heure
//if(empty($_SESSION["debut"])){
if(!isset($_SESSION["debut"])){
$_SESSION["debut"] = time() ;
}
if(!isset($_SESSION["nb_req"])){
//if(empty($_SESSION["nb_req"])){
$_SESSION["nb_req"] = 0 ;
}
//Calcul du temps de connexion
$temps = time() - $_SESSION["debut"] ;
//Incrémentation du nombre de requêtes
$_SESSION["nb_req"]++ ;
2022/2023 PHP - Cookies et Sessions 26
Bibliographie
• A. Delhay-Lorrain, cours web serveur, IUT de Lannion, Lannion
• B. Bachelet, cours php, IUT d’Allier, Vichy
• [Link]
• [Link]
2022/2023 PHP - Cookies et Sessions 27
2022/2023 PHP - Cookies et Sessions 28
Sessions
• Liaison (identifiant - données sur le serveur)
• stockage mémoire, disque, base de données, ...
• format propriétaire, XML (WDDX), ...
• Transmission de l’identifiant
• par cookie ou ré-écriture (automatique)
2022/2023 PHP - Cookies et Sessions 29
Sessions en PHP
• Un support transparent
• compilation avec --enable-trans-sid
• transmission via les paramètres CGI (≠ cookies)
2022/2023 PHP - Cookies et Sessions 30
Sessions en PHP
• Génération aléatoire des identifiants
• spécification possible de sources d’entropie
• Stockage des informations de session
• sur fichier (par défaut) ou base de données
• Format de stockage
• format interne PHP (par défaut) ou WDDX
• Garbage collector automatique
2022/2023 PHP - Cookies et Sessions 31