Accueil » Tutoriaux » PHP / SQL » Les sessions
Les sessions en PHP

  • Une définition s'impose.

Une session est un système de sauvegarde temporaire des informations concernant un utilisateur. A chaque ouverture de session, l'internaute se voit attribuer un identifiant. D'où l'intérêt des sessions, on peut maintenant personnaliser notre application en fonction de chaque utilisateur sans utiliser de base de données.

Cet identifiant peut-être transmis soit en GET (c'est-à-dire que l'identifiant est ajouté à la fin de l'url), soit en POST (c'est-à-dire que l'identifiant est stocké dans un Cookie sur l'ordinateur de l'utilisateur) selon la configuration du serveur. Les informations seront à disposition tout le long de la session. On peut bien sûr les modifier. Une session peut contenir tout type de données : nombre(entier, flottant), chaîne de caractères et même tableau.

Contrairement à une base de données ou un système de fichiers, la session conserve les informations pendant quelques minutes. Cette durée dépend de la configuration du serveur mais est généralement fixée à une trentaine de minutes (par défaut).

Parmi les utilisations les plus courantes de session, on trouve :

  • Les espaces membres et accès sécurisés avec authentification.
  • La gestion d'un panier d'achat sur un site de vente en ligne.
  • Formulaires en plusieurs pages.

  • Initialisation

L'initialisation doit se faire au début de chaque page. Avant tout autre envoi au navigateur. Dans le cas contraire voici les erreurs qui peuvent se produirent :

Cannot modify header information - headers already sent by ...
Cannot send session cookie - headers already sent by ...

Si vous avez ces erreurs, vous savez quoi faire !

PHP introduit nativement une fonction permettant de démarrer ou de continuer une session. Il s'agit de session_start(). Cette fonction ne prend pas de paramètre et renvoit toujours true. Elle vérifie l'état de la session courante. Si elle est inexistante, alors le serveur la crée sinon elle la poursuit.

<?php session_start(); ?>

Cet appel doit se faire sur toute les pages utilisant le système de session.

 

  • Exploitation 

Lorsqu'une session est créée, elle est par défaut vide. Il faut donc lui attribuer des valeurs. Pour cela, le langage PHP met en place le tableau superglobal $_SESSION. Le tableau $_SESSION peut-être indexé numériquement mais aussi associativement. En règle générale, on préfère la seconde afin de pouvoir donner des noms de variables de session, histoire de mieux s'y retrouver.

Pour enregistrer une nouvelle variable de session, c'est très simple. Il suffit juste d'ajouter une valeur au tableau $_SESSION comme suis :

<?php
session_start(); // on initialise la session
$_SESSION ['Mavariable'] = '1394'; // insertion d'une variable dans le tableau de session
?>

Le tableau $_SESSION était jusqu'à lors vide. Maintenant le tableau contient une variable portant le nom Mavariable et comportant la valeur 1394.

Maintenant si on souhaite l'afficher, il suffit de faire :

<?php
session_start();
echo $_SESSION ['Mavariable']; // cette ligne affichera à l'écran 1394
?>

C'est le même principe pour la modifier.

 

  • Destruction 

Le serveur détruit lui même la session au bout d'un certain laps de temps si la session n'a pas été renouvellée. En revanche, il est possible de forcer sa destruction grâce à la fonction session_destroy(). Cela permet par exemple de proposer un bouton de déconnexion aux membres d'un site. Cependant, l'utilisation de session_destroy() seule n'est pas très "propre". Voici une manière un peu plus propre et plus sûr :

<?php
session_start(); // initialisation de la session
$_SESSION = array(); // on efface toute les traces dans le tableau
session_destroy() // on détruit la session
unset($_SESSION); // on détruit le tableau de la session
?>

 

Voilà pour ce qui est des sessions. Vous devez maintenant être capable de faire un espace membre. Bonne chance ! Si vous avez des questions, n'hésitez pas.

 

  • Sécurité 

La sécurité est une chose importante dans les sessions, surtout pour les espaces membres. Voivi quelques recommandations :

Tout d'abord, même si votre serveur vous l'autorise, utilisez toujours les Cookies. Et surtout pas la méthose GET. Cela permettra d'éviter le piratage par dessus l'epaule.

N'augmenter pas la durée de validité des sessions.

En ce qui concerne le formulaire d'authentification qui donne accès à la session, utilisez bien la méthode POST et non GET.

Dans un espace membre, vérifier l'existence de la session. Si elle n'existe pas, faites une redirection vers le formulaire d'authentification. Par exemple :

<?php
session_start();
if (!isset($_SESSION['login'])) {
        header("location: ./index.php");  // la session n'existe pas
}          
else { 
        echo 'session existante' ;  // la session existe
}
?>

Dans cet exemple, si, lors de la création de la session, on a placé dans le tableau de la session, une variable login, on doit forcément pouvoir la retrouver.
Si ce n'est pas le cas, c'est qu'il n'y a pas de session valide, donc redirection vers la racine du site.

 

  • Quelques liens

Voici un article sur la sécurité des sessions : php security consortium.