Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. PHP et MySQL
  3. Gérer les sessions
Extrait - PHP et MySQL Maîtrisez le développement d'un site web dynamique et interactif (5e édition)
Extraits du livre
PHP et MySQL Maîtrisez le développement d'un site web dynamique et interactif (5e édition)
1 avis
Revenir à la page d'achat du livre

Gérer les sessions

Description du problème

Le protocole HTTP (HyperText Transfer Protocol) est un protocole "sans état" : rien ne permet d’identifier que c’est le même utilisateur qui était précédemment sur la page A et qui maintenant accède à la page B.

En ce qui concerne PHP, nous avons vu qu’une variable a une portée égale au script dans lequel elle est définie et n’existe que le temps de l’exécution d’un script.

Or, un site interactif qui ne se contente pas d’afficher des pages les unes derrière les autres, a souvent besoin, du point de vue de la logique applicative, d’identifier un utilisateur d’une page à l’autre et de conserver des informations relatives à cet utilisateur d’une page à l’autre (typiquement, un panier électronique constitué par l’utilisateur sur une page doit toujours être défini sur la page permettant le paiement).

Le terme "session" désigne la période de temps correspondant à la navigation continue d’un utilisateur sur un site. "Gérer les sessions" consiste donc à être en mesure d’identifier l’instant où un nouvel utilisateur accède à une page du site et de conserver des informations relatives à cet utilisateur jusqu’à ce qu’il quitte le site. L’utilisateur n’est pas forcément un utilisateur authentifié par un nom et un mot de passe mais peut très bien être un "anonyme", non référencé par le site, qui effectue un achat. Beaucoup de sites interactifs proposent des fonctionnalités d’identification (membre, abonné …) car cela permet de conserver des informations sur l’utilisateur d’une visite à l’autre...

Authentification

1. Vue d’ensemble

Certains sites ont besoin d’authentifier les utilisateurs qui accèdent au site afin de vérifier que ces derniers sont bien inscrits.

Cette authentification comprend généralement deux étapes :

  • saisie par l’utilisateur d’informations d’identification, typiquement un nom et un mot de passe ;

  • vérification que l’identification saisie correspond bien à un utilisateur inscrit.

2. Saisie de l’identification

L’identification peut être saisie de deux manières :

  • par l’intermédiaire d’un formulaire prévu à cet effet ;

  • par les fonctions d’authentification HTTP.

a. Identification par formulaire

Il est très simple de créer un petit formulaire permettant à l’utilisateur de saisir un nom et un mot de passe.

Exemple de script PHP (login.php) qui affiche ce formulaire (fonction de vérification pour l’instant non définie)

<?php 
// Inclusion du fichier contenant les fonctions générales. 
include('fonctions.inc.php'); 
// Fonction qui vérifie que l'identification saisie  
// est correcte. 
function utilisateur_existe($identifiant,$mot_de_passe) { 
    // Aléatoire, en attendant mieux ... 
    return (bool) rand(0,1); 
} 
// Initialisation des variables. 
$identifiant = ''; 
$mot_de_passe = ''; 
$message = ''; 
// Traitement du formulaire. 
if (isset($_POST['connexion'])) { 
    // Récupérer les informations saisies. 
    $identifiant = $_POST['identifiant']; 
    $mot_de_passe = $_POST['mot_de_passe']; 
    //...

Utiliser des cookies

1. Principe

Un cookie est un petit fichier déposé, par un site, sur le poste de l’internaute et qui peut contenir des informations. Les cookies sont automatiquement renvoyés au serveur web, par le navigateur, lorsque l’internaute navigue dans les pages du site en question.

PHP permet de récupérer très facilement, dans des variables, les données stockées dans le cookie.

La fonction setcookie permet de déposer un cookie sur le poste de l’internaute.

Syntaxe

booléen setcookie(chaîne nom [, chaîne valeur [, entier expiration 
[, chaîne chemin [, chaîne domaine [, booléen securisé[,  
booléen http_uniquement]]]]]]) 
booléen setcookie(chaîne nom [, chaîne valeur [, tableau options]]) 

nom

Nom du cookie.

valeur

Valeur stockée dans le cookie.

expiration

Date d’expiration du cookie (timestamp Unix).

chemin

Chemin du répertoire sur le serveur dans lequel le cookie est disponible. Mettre / pour rendre le cookie disponible sur le domaine entier ou /rep/ pour rendre le cookie disponible dans le répertoire /rep/ du domaine et tous ses sous-répertoires. Par défaut, égal au répertoire à partir duquel le cookie a été déposé.

domaine

Domaine auquel le cookie est renvoyé. .monSite.com (avec un point au début) permet par exemple de rendre le cookie disponible pour tous les sous-domaines de monSite.com.

sécurisé

Mettre TRUE pour indiquer que le cookie ne doit être transmis que sur une connexion sécurisée (FALSE par défaut). 

http_uniquement

Mettre TRUE pour indiquer que le cookie ne doit être transmis que pour le protocole HTTP (FALSE par défaut).

options

Tableau associatif utilisé pour définir les options du cookie...

Utiliser la gestion des sessions de PHP

1. Principes

PHP propose un ensemble de fonctions qui facilitent la gestion des sessions. Les principes sont les suivants :

  • Un identifiant unique est automatiquement attribué à chaque session.

  • Cet identifiant unique est transmis d’une page à l’autre, soit par cookie (si le poste accepte les cookies), soit par l’URL dans le cas contraire ; en tout état de cause, c’est PHP qui choisit automatiquement la bonne méthode et assure ce transfert (à quelques réserves près liées à la configuration).

  • Les données dont vous souhaitez conserver la valeur d’une page à l’autre pendant la durée de la session sont indiquées à PHP qui se charge automatiquement de restituer leur valeur au début du script et de les sauvegarder à la fin du script.

En bref, PHP se charge de toute la gestion.

2. Mise en œuvre

Les principales fonctions du module de gestion des sessions sont les suivantes :

Nom

Rôle

session_start

Ouvre une nouvelle session ou réactive la session courante.

session_id

Retourne (ou éventuellement modifie) l’identifiant de la session.

session_name

Retourne (ou éventuellement modifie) le nom de la variable utilisée pour stocker l’identifiant de la session.

session_abort

Annule les modifications apportées aux données de session et termine la session.

session_reset

Réinitialise les données de session à leurs valeurs initiales.

session_destroy

Supprime la session.

session_status

Retourne le statut actuel d’une session.

En complément, le tableau $_SESSION permet de manipuler très facilement les données de session.

session_start

Syntaxe

booléen session_start([tableau options]) 

options

Tableau associatif qui permet de définir des options...

Conserver des informations d’une visite à une autre

Si vous souhaitez pouvoir conserver des informations sur un utilisateur d’une visite à l’autre (éventuellement très éloignées dans le temps), il existe deux solutions prédominantes :

  • déposer un cookie sur son poste (de préférence avec son accord préalable) ;

  • stocker les informations côté serveur (le plus pratique étant d’utiliser une base de données), et associer ces informations à une identification (typiquement un nom et un mot de passe) que l’utilisateur devra saisir à chaque visite.

Une solution intermédiaire, élégante et respectueuse de l’utilisateur est utilisée par certains sites ; cette solution consiste à proposer à l’utilisateur de déposer sur son poste un cookie qui ne contient qu’une ou deux informations permettant la connexion automatique au site (sans saisir de nom et de mot de passe), les informations complémentaires étant récupérées dans une base de données.

Nous allons illustrer cette solution à l’aide de deux pages :

  • une page de personnalisation (script personnaliser.php) qui permet à l’utilisateur d’activer ou de désactiver la connexion automatique ;

  • une page d’identification (script login.php) qui, selon le cas, effectue la connexion automatique ou demande à l’utilisateur de se connecter.

Chaque connexion de l’utilisateur est une session.

Source

  • Script personnaliser.php :

<?php 
// Inclusion du fichier contenant les fonctions générales. 
include('fonctions.inc.php'); 
// Ouvrir/réactiver la session. 
session_start(); 
// Initialisation des variables. 
$message = ''; 
// La session...

Petite synthèse sur les variables GPCS (Get/Post/Cookie/Session)

Depuis le début de cet ouvrage, nous avons rencontré des variables "particulières", celles associées à des données de formulaire, à des données transmises par une URL, à des données d’un cookie ou encore, à des données de sessions.

Ces différents types de variables sont désignés sous le terme de variables GPCS (Get/Post/Cookie/Session).

Nous avons vu que ces variables fonctionnaient selon le même principe : elles sont accessibles par l’intermédiaire de tableaux associatifs $_GET, $_POST, $_COOKIE et $_SESSION. En complément, le tableau associatif $_REQUEST regroupe le contenu des tableaux $_GET, $_POST et $_COOKIE.

Le tableau $_REQUEST doit être utilisé avec précaution car il contient des données fournies au script par plusieurs mécanismes ; nous ne sommes donc pas forcément certains que l’information lue arrive bien par le moyen attendu.

Le fait que les tableaux $_GET, $_POST et $_COOKIE soient effectivement créés dépend de la directive de configuration variables_order.

Cette directive est une chaîne composée des caractères G, P et C correspondant aux types déjà évoqués, et de deux autres caractères : E, correspondant aux variables d’environnement, et S, correspondant aux variables du serveur HTTP. Par défaut, la directive variables_order est égale à EGPCS.

Les variables d’environnement du système d’exploitation et les variables du serveur HTTP sont rendues disponibles dans l’environnement PHP à travers les tableaux associatifs $_ENV et $_SERVER.

L’ordre dans lequel les variables Get, Post et Cookie sont définies dans le tableau...