Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Simple comme les sessions !

Dans cet article, je vais tenter d'expliquer le plus clairement possible ce que sont les sessions et comment les utiliser avec PHP.

C'est quoi une session ?

C'est la période de temps qui s'écoule entre l'ouverture de l'application (arrivée sur le site) et sa fermeture (départ du site). Ainsi, lorsqu'un utilisateur ouvre à nouveau l'application après plusieurs minutes, jours, mois ou années, il démarre une nouvelle session d'utilisation.

Pendant cette période de temps, il peut être intéressant de conserver des données pour les utiliser sur d'autres pages.

Attention : Il ne faut pas confondre les données d'une session avec les données utilisateur. Les données de session sont volatiles et disparaissent lorsque l'utilisateur quitte l'application, tandis que les données utilisateur sont des informations sauvegardées qui peuvent être manipulées indéfiniment entre plusieurs sessions.

Oui, mais techniquement qu'est-ce que c'est ?

Pour une application non-web comme par exemple "Photoshop®", chaque utilisateur exécute le programme sur son propre ordinateur. Lorsque l'utilisateur choisit une couleur, celle-ci est mémorisée indépendamment des autres utilisateurs puisqu'ils ne sont pas liés.

Pour une application Web, c'est très différent car l'application est exécutée sur le serveur où plusieurs utilisateurs interagissent en même temps au moyen de leur navigateur. Imaginez qu'un utilisateur demande à changer la couleur du fond en rouge et qu'une fraction de seconde plus tard un autre utilisateur demande un fond bleu, celui-ci ne doit pas modifier la couleur de l'utilisateur précédent. Il est donc important que l'application soit en mesure de faire la différence entre les utilisateurs en attribuant une couleur différente pour chacun d'entre eux.

Malheureusement, il est impossible de savoir quel utilisateur effectue une demande de traitement (une requête) entre deux "clics" si le navigateur n'envoie pas d'informations pour les différencier (l'adresse IP n'étant pas fiable).

Pour résoudre ce problème, à la première connexion, on génère un identifiant aléatoire de grande taille (pour éviter que deux utilisateurs aient le même) et à chaque requête, le navigateur envoie cet identifiant. Cet identifiant peut être transmit par un cookie, dans un lien, dans un champ de formulaire, ... etc.

Au moyen de cet identifiant, le serveur reprend les données qu'il avait sauvegardées, les rendant ainsi disponibles pour l'application. Si l'application modifie ces données, le serveur les sauvegarde.

Remarque : Comme le serveur ne peut pas savoir si l'utilisateur a quitté l'application, les données de sessions sont automatiquement détruites après une certaine période d'inactivité. C'est ce que l'on appelle la durée d'expiration. Pour PHP, la durée d'expiration est d'environ 24 minutes par défaut.

Oui, mais techniquement, en PHP, je fais comment ??

En PHP, c'est ultra-simple, il suffit d'utiliser la fonction "session_start()" dans tous vos script et avant tout envoi de texte (donc pas de code HTML avant la balise "<?php"). Ensuite, toutes les données que vous placez dans le tableau $_SESSION seront restituées dans les autres pages. Il n'y a rien de plus à faire !! PHP gère lui même la création de l'identifiant de session et sa transmission de page en page.

Voici un petit exemple :

page1.php
<?php
session_start();
$_SESSION['nom'] = 'Charlie';
?><html>
<head>
  <title>Page 1</title>
</head>
<body>
<p><a href="page2.php">Aller à la page 2</a></p>
</body>
</html>

page2.php
<?php
session_start();
?><html>
<head>
  <title>Page 2</title>
</head>
<body>
<p>Le nom de mon furet est <?php echo $_SESSION['nom'] ?></p>
<p><a href="page1.php">Revenir à la page 1</a></p>
</body>
</html>

Voilà, simple non ?

Remarque : Pour effacer une donnée de session, il suffit d'utiliser le mot-clef "unset" et pour tester si une variable de session existe, il faut utiliser le mot-clef "isset" (ou "empty"). En gros, on manipule le tableau de session comme un tableau normal, à la différence près que le contenu de celui-ci n'est pas effacé quand on passe d'une page à l'autre.


Par Frédéric Bouchery
ADAM Benjamin 2008 | Admin