1. Les sessions
Les Sessions en PHP
Rappels sur les variables "super globale", ou variable globale automatique
Ces variables sont automatiquement générées par le script si cela est nécessaire. Ces variables sont accessibles partout dans le code. Vous connaissez et utilisez déjà ces variables avec les formulaires : $_POST
et $_GET
. Ces deux variables sont des tableaux associatifs permettant, respectivement, de récupérer des données envoyées par le client en POST ou en GET. Il existe bien d'autres variables de ce type :
$_SERVER
: ce sont des valeurs renvoyées par le serveur (IP, ...)$_SESSION
: on y retrouve les variables de session. Ce sont des variables qui restent stockées sur le serveur le temps de la présence d'un visiteur.$_COOKIE
: contient les valeurs des cookies enregistrés sur l'ordinateur du visiteur. Cela nous permet de stocker des informations sur l'ordinateur du visiteur pendant plusieurs mois, pour se souvenir de son nom par exemple$_FILES
: elle contient la liste des fichiers qui ont été envoyés via le formulaire précédent
Principe
Les sessions constituent un moyen de conserver des variables sur toutes les pages de votre site. Jusqu'ici, nous étions parvenus à passer des variables de page en page via la méthode GET (en modifiant l'URL : page.php?variable=valeur) et via la méthode POST (à l'aide d'un formulaire). Cette solution n'est pas très pratique et assez peu sécurisée. Comment faire, par exemple, si vous souhaitez mémoriser le fait qu'un utilisateur soit connecté/identifié ?
Fonctionnement
L'utilisation des sessions se déroule en 3 grandes étapes :
Un visiteur arrive sur votre site. On demande à créer une session pour lui. PHP génère alors un numéro unique. Ce numéro est souvent très grand et écrit en hexadécimal, par exemple : a02bbffc6198e6e0cc2715047bc3766f.
Une fois la session générée, on peut créer une infinité de variables de session pour nos besoins. Par exemple, on peut créer une variable
$_SESSION['nom']
. Le serveur conserve ces variables même lorsque la page PHP a fini d'être générée. Cela veut dire que, quelle que soit la page de votre site, les variables sont connus.Lorsque le visiteur se déconnecte de votre site, la session est fermée et PHP "oublie" alors toutes les variables de session que vous avez créées.
Le numéro de session généré, qui sert d'identifiant et est appelé "ID de session" (ou PHPSESSID). PHP transmet automatiquement cet ID de page en page en utilisant généralement un cookie stocké sur l'ordinateur du visiteur.
Il est en fait diffcile de savoir précisément quand un visiteur quitte votre site. En effet, lorsqu'il ferme son navigateur ou va sur un autre site, le vôtre n'en est pas informé. Soit le visiteur clique sur un bouton "Déconnexion" (que vous aurez créé) avant de s'en aller, soit on attend quelques minutes d'inactivité pour le déconnecter automatiquement : on parle alors de timeout. Le plus souvent, le visiteur est déconnecté par un timeout.
Définition
Une session est donc un moyen de stocker des informations (variables) sur le serveur, à la différence des cookies qui sont stockés sur le poste client. Les sessions permettent de conserver des informations d'une page à l'autre. Les sessions sont uniques pour chaque utilisateur, et ne sont accessibles que par le site qui les a créées.
Un cookie est généralement créé pour stocker l'identifiant unique de la session.
Un des grands intérêts des sessions est qu’on va pouvoir conserver des informations pour un utilisateur lorsqu’il navigue d’une page à une autre. De plus, les informations de session ne vont cette fois-ci pas être stockées sur les ordinateurs de vos visiteurs à la différence des cookies mais plutôt côté serveur ce qui fait que les sessions vont pouvoir être beaucoup plus sûres que les cookies.
La durée de vie d'une session dépend de la configuration du serveur. Par défaut, elle est de 24 minutes. Il est possible de la modifier dans le fichier de configuration php.ini.
Création d'une session
Pour créer une session, il faut utiliser la fonction session_start()
qui va créer un fichier de session sur le serveur. Ce fichier contient les informations de la session. Il est identifié par un identifiant unique qui est stocké dans un cookie (souvent nommé PHPSESSID). Ce cookie est envoyé au navigateur du client. Le client envoie ce cookie à chaque requête HTTP. Le serveur peut ainsi retrouver le fichier de session correspondant à l'identifiant contenu dans le cookie.
Il va falloir appeler session_start()
dans chaque page où on souhaite pouvoir accéder aux variables de session.
Attention au piège ! Il faut appeler session_start() sur chacune de vos pages AVANT d'écrire le moindre code HTML (avant même la balise ). Si vous oubliez de lancer session_start(), vous ne pourrez pas accéder aux variables superglobales $_SESSION.
Utilisation des variables de session
Une fois la session démarrée, on peut utiliser les variables de session comme des variables normales. Elles sont stockées dans le tableau $_SESSION
.
Exemple
Ci-dessous un exemple complet d'utilisation de session. Première page (on pourrait imaginer un formulaire de connexion qui récupère les données.)
Remarque : On peut créer/modifier les variables de session n'importe où dans le code. La seule chose qui importe, c'est que le session_start() soit fait au tout début de la page. Une autre page utilisant la session précédemment créée :
Destruction d'une session
Pour détruire une session, il faut utiliser la fonction session_destroy()
.
Cas d'utilisation des sessions
Concrètement, les sessions peuvent servir dans de nombreux cas sur votre site (et pas seulement pour retenir un nom et un prénom !). Voici quelques exemples :
Imaginez un script qui demande un login et un mot de passe pour qu'un visiteur puisse se connecter (s'authentifier). On peut enregistrer ces informations dans des variables de session et se souvenir de l'identifiant du visiteur sur toutes les pages du site !
On peut restreindre l'accès à certaines pages en fonction de l'utilisateur connecté
On peut sauvegarder un panier sur un site e-commerce
On peut se souvenir de la langue choisie pour afficher un site
...
Exercice
Ecrire 3 pages php (index.php, page1.php et page2.php).
Sur la page index.php, ajoutez un formulaire avec deux champs (nom, ville), et sauvegardez ces champs dans une session (on utilisera le fichier index.php pour le traitement également). Sur cette page index.php, vous mettrez deux liens pour accéder aux deux autres pages.
Sur chacune de ces deux pages vous afficherez les informations de la session.
Ajouter un lien (et une page) pour gérer l'effacement des données de la session.
Last updated