Formation PUB010 : PHP, 2022 Passer de l'information entre les pages Web

22.3 Variables de session


Dans le monde du Web, une session est une période de temps qui débute généralement lorsqu'un internaute accède à un site Web et qui se termine :

En PHP, la notion de session permet de stocker des informations propres à un internaute. La session utilise un petit fichier texte (un cookie) placé sur le serveur. Le code PHP peut y enregistrer toutes les informations qui doivent être passées d’une page à l’autre. 

Pour différencier les informations des utilisateurs du site Web, un identifiant de session doit être créé.

L’ID de session doit être conservé dans un cookie côté client. Chaque client qui accède à un site Web aura son propre identifiant de session stocké dans un cookie.

Dans le cas où ce dernier aurait désactivé ses cookies, l’ID sera passé en paramètre grâce à l’encodage d’URL.

Cookie de session

Heureusement, tout ce processus est transparent pour le codeur PHP. Tout ce qu'il faut faire, c'est démarrer une session puis manipuler les variables de session selon le besoin.

▼Publicité Le texte se poursuit plus bas

Activer les variables de session

Les variables de session sont stockées dans un tableau nommé $_SESSION. Pour pouvoir utiliser ce tableau, chaque page doit démarrer la session à l'aide de l'instruction session_start().

Cette instruction doit être exécutée avant que des informations aient été envoyées au navigateur. Si vous ne respectez pas cette condition, les variables de session ne fonctionneront pas.

Le meilleur endroit pour initialiser la session est dans le fichier configuration.inc.

Fichier configuration.inc

@session_start();

Afin de nous prémunir contre d'éventuelles attaques, il faut faire précéder le session_start() par le caractère @ (opérateur de contrôle d'erreur). Ceci fera en sorte que si la fonction génère une erreur, l'erreur ne sera jamais affichée à l'écran peu importe les configurations du serveur.

Par exemple, sans le @, si on tente d'activer les variables de session alors que le navigateur a déjà reçu ne serait-ce qu'une ligne blanche, la page affichera un message du genre : « Warning: session_start(): Session cannot be started after headers have already been sent in /shared/httpd/monsite/htdocs/include/configuration.inc on line 3 ». Ce message donne beaucoup d'informations intéressantes aux utilisateurs malveillants...

Créer une variable de session

Pour créer une variable de session et lui assigner une valeur :

Syntaxe PHP

$_SESSION['nom_variable_session'] = valeur;

Ex :

PHP

$_SESSION['usager'] = 'toto';

ou :

PHP

$_SESSION['usager'] = $usager;

Vérifier l'existance d'une variable de session

Si on tente de lire le contenu d'une variable de session alors qu'elle n'existe pas, ceci fera planter le programme. Il faut donc toujours vérifier son existance avant de tenter de l'utiliser.

Pour vérifier si une variable de session existe :

Syntaxe PHP

if (isset($_SESSION['nom_variable_session'])) {

   ...

}

Ex :

PHP

if (isset($_SESSION['usager'])) {

   ...

}

Lire le contenu d'une variable de session

Pour lire le contenu d'une variable de session :

Syntaxe PHP

$variable = $_SESSION['nom_variable_session'];

Ex :

PHP

$usager = $_SESSION['usager'];

Détruire une variable de session

Parfois, on pourra avoir besoin d'un algorithme qui agit différemment si une variable de session existe et si elle n'existe pas. Il faudra donc prendre soin de la détruire lorsque requis.

Pour détruire une variable de session :

Syntaxe PHP

unset($_SESSION['nom_variable_session']);

Ex :

PHP

unset($_SESSION['usager']);

Un résultat semblable sera obtenu en mettant la variable à null.

Ex :

PHP

$_SESSION['usager'] = null;

Avec ces deux techniques, isset($_SESSION['...']) retournera false.

Il existe de petites différences entre unset() et =null, notamment au niveau de la gestion de la mémoire (unset() libère plus de mémoire) et de la vitesse d'exécution (= null est plus rapide) mais pour l'essentiel, l'une ou l'autre des techniques peuvent être utilisées (voir discussion ici : https://stackoverflow.com/questions/13667137/the-difference-between-unset-and-null).

Le tout en action

Voici un petit exemple qui utilise plusieurs des instructions précédentes :

PHP

@session_start();
...
if (!isset($_SESSION['usager'])) {
   echo '<a href="authentification.php">Cliquez ici pour vous authentifier.</a>';
   $_SESSION['page_actuelle'] = basename($_SERVER['SCRIPT_NAME']);
}
else {
   $usager = $_SESSION['usager'];
   echo 'Bienvenue, $usager !';
   echo '<a href="deconnexion.php">Déconnexion</a>';
}

 

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 30 mars 2023
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre