PHP - Sessions

Une autre façon de rendre les données accessibles sur les différentes pages d'un site Web entier consiste à utiliser une session PHP.

Une session crée un fichier dans un répertoire temporaire sur le serveur où les variables de session enregistrées et leurs valeurs sont stockées. Ces données seront disponibles sur toutes les pages du site lors de cette visite.

L'emplacement du fichier temporaire est déterminé par un paramètre dans le php.ini fichier appelé session.save_path. Avant d'utiliser une variable de session, assurez-vous d'avoir configuré ce chemin.

Lorsqu'une session est lancée suite à des événements -

  • PHP crée d'abord un identifiant unique pour cette session particulière qui est une chaîne aléatoire de 32 nombres hexadécimaux tels que 3c7foj34c3jj973hjkop2fc937e3443.

  • Un cookie appelé PHPSESSID est automatiquement envoyé à l'ordinateur de l'utilisateur pour stocker une chaîne d'identification de session unique.

  • Un fichier est automatiquement créé sur le serveur dans le répertoire temporaire désigné et porte le nom de l'identifiant unique préfixé par sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.

Lorsqu'un script PHP souhaite récupérer la valeur d'une variable de session, PHP obtient automatiquement la chaîne d'identifiant de session unique du cookie PHPSESSID puis recherche dans son répertoire temporaire le fichier portant ce nom et une validation peut être effectuée en comparant les deux valeurs.

Une session se termine lorsque l'utilisateur perd le navigateur ou après avoir quitté le site, le serveur terminera la session après une période de temps prédéterminée, généralement 30 minutes.

Démarrer une session PHP

Une session PHP est facilement lancée en appelant le session_start()Cette fonction vérifie d'abord si une session est déjà démarrée et si aucune n'est démarrée, elle en démarre une. Il est recommandé de mettre l'appel àsession_start() au début de la page.

Les variables de session sont stockées dans un tableau associatif appelé $_SESSION[]. Ces variables sont accessibles pendant la durée de vie d'une session.

L'exemple suivant démarre une session puis enregistre une variable appelée counter qui est incrémenté à chaque fois que la page est visitée pendant la session.

Se servir de isset() pour vérifier si la variable de session est déjà définie ou non.

Mettez ce code dans un fichier test.php et chargez ce fichier plusieurs fois pour voir le résultat -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

Il produira le résultat suivant -

You have visited this page 1in this session.

Détruire une session PHP

Une session PHP peut être détruite par session_destroy()fonction. Cette fonction n'a besoin d'aucun argument et un seul appel peut détruire toutes les variables de session. Si vous souhaitez détruire une seule variable de session, vous pouvez utiliserunset() pour désactiver une variable de session.

Voici l'exemple pour annuler la définition d'une seule variable -

<?php
   unset($_SESSION['counter']);
?>

Voici l'appel qui détruira toutes les variables de session -

<?php
   session_destroy();
?>

Activer la session automatique

Vous n'avez pas besoin d'appeler la fonction start_session () pour démarrer une session lorsqu'un utilisateur visite votre site si vous pouvez définir session.auto_start variable à 1 po php.ini fichier.

Sessions sans cookies

Il peut y avoir un cas où un utilisateur ne permet pas de stocker des cookies sur sa machine. Il existe donc une autre méthode pour envoyer l'ID de session au navigateur.

Vous pouvez également utiliser le SID constant qui est défini si la session a démarré. Si le client n'a pas envoyé de cookie de session approprié, il se présente sous la forme nom_session = id_session. Sinon, il se développe en une chaîne vide. Ainsi, vous pouvez l'intégrer sans condition dans des URL.

L'exemple suivant montre comment inscrire une variable et comment créer un lien correctement vers une autre page à l'aide de SID.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Il produira le résultat suivant -

You have visited this page 1in this session.
To continue click following link

le htmlspecialchars() peut être utilisé lors de l'impression du SID afin d'éviter les attaques liées à XSS.