0% ont trouvé ce document utile (0 vote)
6 vues13 pages

Guide PHP : Sessions, Cookies et Regex

Ce document est un guide pédagogique sur la gestion des sessions, des cookies et des expressions régulières en PHP. Il couvre des concepts essentiels tels que le fonctionnement des sessions côté serveur, la création et la gestion des cookies côté client, ainsi que l'utilisation des regex pour la validation des données. Des exemples pratiques et des bonnes pratiques de sécurité sont également fournis pour chaque sujet.

Transféré par

herz.tj.rak
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues13 pages

Guide PHP : Sessions, Cookies et Regex

Ce document est un guide pédagogique sur la gestion des sessions, des cookies et des expressions régulières en PHP. Il couvre des concepts essentiels tels que le fonctionnement des sessions côté serveur, la création et la gestion des cookies côté client, ainsi que l'utilisation des regex pour la validation des données. Des exemples pratiques et des bonnes pratiques de sécurité sont également fournis pour chaque sujet.

Transféré par

herz.tj.rak
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Sessions, Cookies et Validation de Données (Regex) - Un Guide Pédago-

gique

1
Tutoriel PHP Avancé : Gérer l'État d'une

Application Web

Cours PHP enrichi

Octobre 2025

Table des matières


1 Les Sessions PHP : Le Mécanisme de la Mémoire Côté Serveur 3
1.1 Comprendre le Protocole HTTP et le Rôle de la Session . . . . . . . . . . . 3
1.2 Démarrer et Gérer le Cycle de Vie d'une Session . . . . . . . . . . . . . . . 3
1.2.1 La Fonction Fondamentale : session_start() . . . . . . . . . . . . 3
1.2.2 Durée de Vie et Inactivité . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Manipulation des Données de Session ($_SESSION) . . . . . . . . . . . . . . 3
1.3.1 Écrire et Mettre à Jour une Variable . . . . . . . . . . . . . . . . . 3
1.3.2 Lire et Vérier une Variable de Session . . . . . . . . . . . . . . . . 4
1.3.3 Supprimer une Variable et Détruire la Session . . . . . . . . . . . . 4

2 Les Cookies PHP : La Mémoire Stockée Côté Client 6


2.1 Dénition et Cas d'Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Création d'un Cookie : setcookie() . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Comprendre les Paramètres de Sécurité . . . . . . . . . . . . . . . . 6
2.3 Lecture et Suppression d'un Cookie . . . . . . . . . . . . . . . . . . . . . . 6
2.3.1 Lecture ($_COOKIE) . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3.2 Supprimer un Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Bonnes Pratiques de Sécurité pour les Cookies . . . . . . . . . . . . . . . . 7

3 Expressions Régulières (Regex) : L'Outil de Validation des Formats 8


3.1 Introduction et Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Anatomie d'une Regex PHP et Syntaxe de Base . . . . . . . . . . . . . . . 8
3.2.1 Les Méta-Caractères de Base . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2 Les Quanticateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 Exemples de Validation Avancée avec preg_match . . . . . . . . . . . . . . 8
3.3.1 Exemple 1 : Validation d'une Chaîne Alphanumérique . . . . . . . . 8
3.3.2 Exemple 2 : Validation d'un Mot de Passe Fort (Lookaheads) . . . . 9
3.4 Exemples d'Extraction et de Remplacement . . . . . . . . . . . . . . . . . 9
3.4.1 Exemple 3 : Extraction d'un Prix avec Décimales . . . . . . . . . . 9
3.4.2 Exemple 4 : Remplacement de Texte avec preg_replace . . . . . . 9

2
4 Sécurité Avancée et Conguration Serveur 10
4.1 Sécuriser les Formulaires PHP : Assainissement et Validation . . . . . . . . 10
4.1.1 Exercice : Formulaire de Contact Sécurisé . . . . . . . . . . . . . . 10
4.2 Protection des Répertoires avec .htaccess (Niveau Serveur) . . . . . . . . 11
4.2.1 Concept : Le Duo .htaccess et .htpasswd . . . . . . . . . . . . . 12
4.2.2 Exemple : Conguration du Fichier .htaccess . . . . . . . . . . . . 12

3
1 Les Sessions PHP : Le Mécanisme de la Mémoire
Côté Serveur
1.1 Comprendre le Protocole HTTP et le Rôle de la Session
Le protocole HTTP (HyperText Transfer Protocol) est par nature sans état (stateless).
Imaginez le serveur comme quelqu'un qui soure d'amnésie : il oublie tout entre deux
requêtes successives.
La Session est le remède à cette amnésie : c'est un mécanisme qui permet de stocker des
informations spéciques à un utilisateur côté serveur pour la durée de sa visite.
 Sécurité : Les données sensibles (comme le statut de connexion) ne quittent jamais
le serveur.
 Identiant (PHPSESSID) : À l'ouverture, le serveur attribue un ID unique.
Cet ID est le seul élément échangé et peut être transmis via un cookie (méthode
privilégiée), l'URL (GET), ou un champ de formulaire (POST).

1.2 Démarrer et Gérer le Cycle de Vie d'une Session


1.2.1 La Fonction Fondamentale : session_start()
Elle est cruciale et doit être appelée sur chaque page où des données de session
sont nécessaires. Elle initie la session ou recharge les données existantes en utilisant le
PHPSESSID transmis.
1 <? php
2 // DOIT tre la toute p r e m i r e instruction de votre script PHP
3 session_start () ;
4 ?>
Listing 1  Démarrage obligatoire de la session

Règle d'or : session_start() doit être exécutée avant que le serveur n'envoie la
moindre sortie au navigateur (pas d'espace, pas de texte, pas de balise HTML avant
<?php). Sinon, vous obtiendrez l'erreur "Headers already sent".

1.2.2 Durée de Vie et Inactivité


Une session est temporaire. Elle est détruite :
 Lorsque l'utilisateur ferme son navigateur (si aucun cookie de session persistant
n'est utilisé).
 Après un certain temps d'inactivité. Par défaut, ce délai est de 24 minutes (déni
par session.gc_maxlifetime dans [Link]).

1.3 Manipulation des Données de Session ($_SESSION)


Toutes les données de session sont gérées via le tableau superglobal $_SESSION.

1.3.1 Écrire et Mettre à Jour une Variable

4
1 <? php
2 session_start () ;
3 // Stocker le statut d ' authentification
4 $_SESSION [ ' login '] = " Dupont " ;
5 // Stocker un tableau ( panier , p r f r e n c e s )
6 $_SESSION [ ' panier '] = [ ' produit_a ' = > 2, ' produit_b ' = > 1];
7 ?>
Listing 2  Écriture de variables de session

1.3.2 Lire et Vérier une Variable de Session


Il est impératif d'utiliser isset() avant de lire une clé pour éviter les erreurs.
1 <? php
2 session_start () ;
3 if ( isset ( $_SESSION [ ' login ']) ) {
4 echo " Bienvenue , " . $_SESSION [ ' login '] . " !" ;
5 } else {
6 echo " Veuillez vous connecter ." ;
7 }
8 ?>
Listing 3  Lecture sécurisée d'une variable

1.3.3 Supprimer une Variable et Détruire la Session


 Supprimer une seule clé : Utilisez unset() pour retirer un élément précis sans
toucher au reste de la session.
1 unset ( $_SESSION [ ' login ']) ;

 Déconnexion complète (Destruction propre) : Il faut vider le tableau, sup-


primer le cookie côté client, et détruire les données côté serveur.
1 <? php
2 session_start () ;
3 $_SESSION = array () ; // 1. Vider le tableau superglobal
4 // 2. Suppression du cookie de session c t client (
optionnel mais r e c o m m a n d pour la p r o p r e t )
5 if ( ini_get (" session . use_cookies ")) {
6 $params = session_get_cookie_params () ;
7 setcookie ( session_name () , '' , time () - 42000 ,
8 $params [ " path " ], $params [" domain " ],
9 $params [ " secure "] , $params [ " httponly "]
10 );
11 }
12 session_destroy () ; // 3. D t r u i r e les d o n n e s c t
serveur
13 header (" Location : / login . php ") ; // Redirection a p r s
d connexion
14 exit () ;

5
15 ?>
Listing 4  Procédure de déconnexion complète

6
2 Les Cookies PHP : La Mémoire Stockée Côté Client
2.1 Dénition et Cas d'Usage
Un cookie est un petit chier texte que le serveur demande au navigateur de l'utili-
sateur d'enregistrer et de renvoyer à chaque nouvelle requête. C'est l'outil idéal pour :
 Mémoriser les préférences d'achage (langue, thème).
 Gérer l'option "Se souvenir de moi" pour faciliter la reconnexion.
 Suivre l'activité des utilisateurs (à des ns statistiques ou publicitaires).

2.2 Création d'un Cookie : setcookie()


La fonction setcookie() est utilisée pour dénir ou mettre à jour un cookie. Elle doit
aussi être appelée avant tout contenu HTML.
1 <? php
2 // Syntaxe : setcookie ( nom , valeur , expiration , chemin , domaine ,
secure , httponly )
3 $une_semaine = time () + (7 * 24 * 3600) ; // Expiration dans 7 jours
( timestamp )
4 setcookie (" preference_theme " , " dark " , $une_semaine , "/" , "" , false ,
true ) ;
5 ?>
Listing 5  Création d'un cookie valide 7 jours

2.2.1 Comprendre les Paramètres de Sécurité


Les deux derniers paramètres sont cruciaux pour la sécurité :
 secure (false ou true) : Si mis à true, le cookie n'est envoyé qu'à travers une
connexion HTTPS. À utiliser systématiquement si votre site est sécurisé.
 httponly (false ou true) : Si mis à true, le cookie devient inaccessible via
JavaScript. C'est la meilleure défense contre la majorité des attaques **XSS**
(Cross-Site Scripting).

2.3 Lecture et Suppression d'un Cookie


2.3.1 Lecture ($_COOKIE)
Les cookies renvoyés par le navigateur sont disponibles dans le tableau superglobal
$_COOKIE.
1 <? php
2 if ( isset ( $_COOKIE [ ' preference_theme ' ]) ) {
3 echo " Le t h m e choisi est : " . $_COOKIE [ ' preference_theme '];
4 }
5 ?>
Listing 6  Lecture d'un cookie
Attention : Vous ne pouvez pas lire un cookie avec $_COOKIE immédiatement après
l'avoir créé avec setcookie(). Le navigateur ne le renverra au serveur qu'à la requête
suivante.

7
2.3.2 Supprimer un Cookie
La seule façon de supprimer un cookie est de le redénir en lui donnant une date
d'expiration passée.
1 <? php
2 // Fixe l ' expiration une heure dans le p a s s ( time () retourne
le timestamp actuel )
3 setcookie (" preference_theme " , "" , time () - 3600) ;
4 ?>

2.4 Bonnes Pratiques de Sécurité pour les Cookies


 Ne pas stocker de données sensibles : Les cookies peuvent être interceptés ou
modiés par l'utilisateur. Ne stockez jamais de mots de passe ou d'informations
condentielles en clair.
 Utiliser httponly : Activez-le pour prévenir les vols de session via XSS.
 Utiliser secure : Si votre site utilise HTTPS (ce qui est la norme), activez-le.

8
3 Expressions Régulières (Regex) : L'Outil de Valida-
tion des Formats
3.1 Introduction et Utilité
Une expression régulière (ou regex) est un puissant langage qui permet de dénir un
motif de recherche complexe dans une chaîne de caractères. En PHP, elles sont indispen-
sables pour :
 Validation : Conrmer qu'une donnée utilisateur (email, numéro, code postal)
respecte un format précis.
 Extraction : Isoler une information spécique d'un texte (ex : toutes les dates,
tous les prix).
 Remplacement : Nettoyer ou modier des parties d'une chaîne.
Les fonctions PHP pour les manipuler commencent par preg_ (preg_match, preg_replace,
etc.).

3.2 Anatomie d'une Regex PHP et Syntaxe de Base


Une regex est toujours encadrée par des délimiteurs (souvent le /).
1 / pattern /i

Ici, pattern est le motif recherché et i est un modicateur (ici, `insensible à la casse`).

3.2.1 Les Méta-Caractères de Base


Ces caractères spéciaux dénissent les limites et les types de données :
  : Le motif doit commencer par le caractère suivant.
 $ : Le motif doit se terminer par le caractère précédent.
 [] : Dénit une plage de caractères ([a-z] pour une lettre minuscule).
 \d : Représente un seul chire (0-9).
 \w : Représente un caractère alphanumérique ou l'underscore.
 . : Représente n'importe quel caractère unique (sauf le saut de ligne).

3.2.2 Les Quanticateurs


Ils dénissent le nombre de fois où le caractère ou le groupe précédent doit apparaître :
 ? : Zéro ou une fois (optionnel).
 + : Une ou plusieurs fois.
 * : Zéro ou plusieurs fois.
 {n} : Exactement n fois (ex : \d{4} pour une année).
 {n,} : Au moins n fois.
 {n,m} : Entre n et m fois.

3.3 Exemples de Validation Avancée avec preg_match


3.3.1 Exemple 1 : Validation d'une Chaîne Alphanumérique
Le motif /[ A − Za − z0 − 9]+/ impose que toute la chaîne soit composée d'une ou
plusieurs lettres ou chires.

9
1 <? php
2 $texte = " MonLogin123 " ;
3 if ( preg_match (" /^[ A -Za -z0 -9]+ $/ " , $texte ) ) {
4 echo " ID utilisateur valide . ";
5 }
6 ?>

3.3.2 Exemple 2 : Validation d'un Mot de Passe Fort (Lookaheads)


Pour vérier plusieurs conditions à la fois (longueur, majuscule, chire), on utilise
les assertions prospectives (Lookaheads : (?=...)). Elles vérient une condition sans
avancer dans la chaîne, permettant d'empiler les contraintes.
1 <? php
2 $pwd = " SuperMdp99 ! ";
3 // Conditions : Majuscule , minuscule , chiffre , c a r a c t r e s p c i a l ,
longueur min 8
4 $pattern = " /^(?=.*[ A -Z ]) (?=.*[ a -z ]) (?=.*\ d) (?=.*[^ A -Za -z0 -9]) .{8 ,}
$/ ";
5
6 if ( preg_match ( $pattern , $pwd )) {
7 echo " Mot de passe conforme aux exigences de s c u r i t .";
8 }
9 ?>
Listing 7  Regex pour un mot de passe fort

3.4 Exemples d'Extraction et de Remplacement


3.4.1 Exemple 3 : Extraction d'un Prix avec Décimales
La fonction preg_match prend un troisième argument qui est un tableau, où les cor-
respondances sont stockées.
1 <? php
2 $texte = " Le total est de 45.99 EUR TTC ." ;
3 // Le motif [\ d .]+ capture tous les chiffres ou le point d c i m a l .
4 preg_match (" /([\ d .]+) / " , $texte , $resultat );
5 echo " Prix extrait : " . $resultat [1]; // Affiche 45.99
6 ?>
Listing 8  Extraction de données

3.4.2 Exemple 4 : Remplacement de Texte avec preg_replace


C'est l'équivalent regex de la fonction str_replace, mais bien plus puissant.
1 <? php
2 $texte = " Cher Monsieur Dupont , ";
3 // Remplace " Monsieur " par " Madame " pour g n r a l i s e r la
salutation

10
4 $nouveau = preg_replace ("/ Monsieur / " , " Madame " , $texte ) ;
5 echo $nouveau ; // Affiche " Cher Madame Dupont ,"
6 ?>

4 Sécurité Avancée et Conguration Serveur


Cette section cruciale aborde les mécanismes de défense indispensables pour toute
application web. Nous explorerons comment sécuriser les données utilisateurs directement
dans le code PHP et comment mettre en place une protection périmétrique au niveau du
serveur Apache.

4.1 Sécuriser les Formulaires PHP : Assainissement et Validation


Les données reçues d'un formulaire sont toujours considérées comme potentiellement
dangereuses. Avant toute utilisation ou stockage, elles doivent être rigoureusement net-
toyées (assainissement) et vériées (validation).

4.1.1 Exercice : Formulaire de Contact Sécurisé


Protection XSS avec htmlspecialchars() L'Assainissement des données est la
première ligne de défense contre les attaques de type XSS (Cross-Site Scripting). La
fonction htmlspecialchars() est utilisée pour convertir des caractères spéciaux HTML
 tels que les chevrons (`<` et `>`)  en entités inoensives. Ainsi, si un attaquant
tente d'injecter un script malveillant, celui-ci sera aché comme du simple texte sans être
exécuté par le navigateur.

Validation d'Email avec filter_var() La Validation garantit que les données cor-
respondent au format attendu. Plutôt que de s'appuyer sur une expression régulière com-
plexe et faillible, PHP ore la fonction filter_var avec le drapeau FILTER_VALIDATE_EMAIL.
Cette méthode est plus robuste pour vérier la conformité de l'adresse email aux standards
Internet.
1 <? php
2 $message = '';
3 $email = '';
4 $erreurs = [];
5
6 if ( $_SERVER [ ' REQUEST_METHOD '] === ' POST ') {
7 // Le code n ' est e x c u t que si la r e q u t e HTTP est de type
POST ( a p r s soumission du formulaire ).
8
9 // 1. Assainissement du message pour p r v e n i r le XSS
10 if (! empty ( $_POST [ ' message ']) ) {
11 // htmlspecialchars est a p p l i q u pour neutraliser toute
balise HTML .
12 // ENT_QUOTES assure que m m e les guillemets sont
chapps pour plus de s c u r i t .
13 $message = htmlspecialchars ( $_POST [ ' message '] , ENT_QUOTES ,
'UTF -8 ');

11
14 } else {
15 $erreurs [ ' message '] = " Le champ message est requis . ";
16 }
17
18 // 2. Validation de l ' email avec une fonction PHP d d i e
19 if (! empty ( $_POST [ ' email ' ]) ) {
20 $email = $_POST [ ' email '];
21 // filter_var retourne FALSE si le format de l ' email n ' est
pas valide .
22 if (! filter_var ( $email , FILTER_VALIDATE_EMAIL )) {
23 $erreurs [ ' email '] = "L ' adresse email n ' est pas au bon
format ." ;
24 }
25 } else {
26 $erreurs [ ' email '] = " Le champ email est requis ." ;
27 }
28
29 if ( empty ( $erreurs ) ) {
30 // Si le tableau d ' erreurs est vide , les d o n n e s sont
fiables ( assainies et v a l i d e s ).
31 echo " <h2 > Formulaire v a l i d avec s u c c s . </ h2 >";
32 }
33 }
34 ?>
Listing 9  Traitement de Formulaire Sécurisé : La Double Sécurité

1 < form method = " post " action ="" >


2 < label > Votre Email ( Validation ) : </ label >
3 < input type =" text " name =" email " value =" <? php echo
htmlspecialchars ( $email ); ?>" >< br >
4 <? php if ( isset ( $erreurs [' email ']) ) echo " <p style =' color : red
; ' >{ $erreurs [ ' email ']} </ p >"; ? >
5
6 < label > Votre Message ( Protection XSS ) : </ label >
7 < textarea name =" message " > <? php echo htmlspecialchars ( $message );
? ></ textarea >< br >
8 <? php if ( isset ( $erreurs [' message ']) ) echo " <p style =' color : red
; ' >{ $erreurs [ ' message ']} </ p > "; ? >
9
10 < button type = " submit " > Envoyer </ button >
11 </ form >
Listing 10  Le Formulaire HTML : Achage Sécurisé des Valeurs


4.2 Protection des Répertoires avec .htaccess (Niveau Serveur)


La protection par .htaccess est une méthode de sécurité passive, mais extrêmement
ecace, car elle opère au niveau du serveur web Apache lui-même. Elle intercepte
l'accès avant même que tout script PHP ne soit appelé, créant un sas de sécurité idéal
pour les zones sensibles.

12
4.2.1 Concept : Le Duo .htaccess et .htpasswd
La mise en place de cette protection nécessite deux chiers essentiels :
 .htaccess : Ce chier de conguration sert de portier. Placé dans le répertoire à
protéger (ex : /admin), il ordonne au serveur d'exiger une authentication.
 .htpasswd : Ce chier contient le registre des identiants autorisés, où tous les
mots de passe doivent être cryptés. Pour une sécurité maximale, ce chier ne doit
idéalement pas être accessible via le web public.

4.2.2 Exemple : Conguration du Fichier .htaccess


Ce code doit être placé dans le répertoire que vous souhaitez rendre privé.

AuthType Basic
AuthName "Acces restreint - Zone Administrateur"
AuthUserFile /chemin/absolu/vers/.htpasswd
Require valid-user

Explications Détaillées des Directives Apache :


 AuthType Basic : Indique que l'on utilise la méthode d'authentication standard
HTTP, qui ache la boîte de dialogue native du navigateur demandant les identi-
ants.
 AuthName "..." : Dénit le titre qui s'achera dans cette boîte de dialogue, in-
formant l'utilisateur de la raison de la restriction.
 AuthUserFile : C'est la directive la plus critique. Elle spécie le chemin absolu
complet (à partir de la racine du serveur) vers le chier qui contient les identiants
cryptés, assurant ainsi la localisation précise du registre de sécurité.
 Require valid-user : Cette instruction ordonne au serveur Apache d'accorder
l'accès uniquement si l'utilisateur fournit un couple identiant/mot de passe pré-
sent et correct dans le chier `.htpasswd`.

13

Vous aimerez peut-être aussi