• Aucun résultat trouvé

Les sessions sont un moyen de conserver des variables sur toutes les pages de votre site.

Jusqu'ici, on était arrivés à 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 (un formulaire quoi).

Mais si on veut transmettre une ou plusieurs variables sur TOUTES les pages de son site, c'est vraiment la galère avec GET et POST... D'où l'invention des sessions.

Comment ça marche ?

1. Un visiteur se connecte. On demande à créer une session pour lui : PHP génère un numéro. Pour cela, on utilise la fonction session_start(). Ce numéro est souvent très gros et écrit en

hexadécimal. Par exemple : a02bbffc6198e6e0cc2715047bc3766f

Ce numéro sert d'identifiant et est appelé "ID de session" (ou PHPSESSID). PHP

transmet automatiquement cet ID de page en page en utilisant un cookie ou via l'url (ex : mapage.php?PHPSESSID=a02bbffc6198e6e0cc2715047bc3766f).

2. A partir de là, c'est du tout bon : on peut créer une infinité de variables de session. Par exemple : $_SESSION['login'] contient le login du visiteur, $_SESSION['password'] contient le mot de passe etc...

L'avantage, c'est que le serveur conserve ces variables même lorsque la page PHP a fini

d'être générée. Ce qui veut dire que, quelle que soit la page de votre site, vous pourrez

récupérer par exemple le login et le mot de passe du visiteur !

3. Lorsque le visiteur se déconnecte (il a cliqué sur un bouton "Déconnecter" ou est resté inactif trop longtemps), alors la session est fermée avec session_destroy()

Ca a l'air compliqué comme ça, mais en fait c'est d'une simplicité à en pleurer.

Le seul truc qu'il ne faut pas oublier de faire, c'est d'appeler session_start() sur chacune de vos pages AVANT d'écrire le moindre code HTML.

Si vous oubliez session_start(), vous ne pourrez pas accéder aux variables superglobales $_SESSION. Faites très attention : appelez session_start tout au début de vos pages PHP. Ne mettez la balise <html> qu'après, sinon vous aurez des problèmes avec votre session.

Après, vous pouvez utiliser les variables $_SESSION comme des variables normales. Un petit exemple ?

Source 3.5.1 : création de variables de session (index.php) <?

session_start(); // On démarre la session AVANT toute chose // On s'amuse à créer quelques variables de session : $_SESSION['prenom'] = 'Jean';

$_SESSION['nom'] = 'Dupont';

$_SESSION['age'] = 24;

// Maintenant que le session_start est fait, on peut taper du code HTML ?> <html> <head> <title>Titre de ma page</title> </head> <body>

Salut <? echo $_SESSION['prenom']; ?> !<br />

Tu es à l'accueil de mon site (index.php). Tu veux aller sur une autre page ?<p> <a href="mapage.php">Lien vers mapage.php</a><br />

<a href="monscript.php">Lien vers monscript.php</a><br /> <a href="informations.php">Lien vers informations.php</a> </body>

</html>

Ne vous y trompez pas : on peut créer des variables de session n'importe où dans le code. Ici je les ai créé en haut de la page, mais j'aurais pu le faire ailleurs.

La seule chose qui importe, c'est que le session_start() soit fait au tout début de la page.

Notez quelque chose de très important : mes liens sont tous simples. Je ne m'occupe de rien : ni de transmettre le nom, prénom, âge du visiteur, ni de transmettre l'ID de session.

Et ça, croyez-moi, c'est génial !

Quand votre site sera un peu gros et qu'il y aura plein de liens partout, vous apprécierez de savoir que PHP s'occupe tout seul de transmettre les variables !

En effet, sur chacune des pages "mapage.php", "monscript.php", "informations.php" (et n'importe quelle autre page de votre site), vous retrouverez les variables $_SESSION['prenom'],

$_SESSION['nom'] et $_SESSION['age'] !

Source 3.5.2 : récupérer les variables de session (informations.php) <?

session_start(); // On démarre la session AVANT toute chose ?> <html> <head> <title>Titre de ma page</title> </head> <body> Re-bonjour !<p>

Je me souviens de toi ! Tu t'appelles <? echo $_SESSION['prenom'] . ' ' . $_SESSION['nom']; ?> !<br />

Et ton âge hummm... Tu as <? echo $_SESSION['age']; ?> ans, c'est ça ? :-D </body>

</html>

Vous voyez ? On a juste fait un session_start(), puis on s'est amusés à afficher les valeurs des variables de session.

Et là, magie !

Les valeurs des variables avaient été conservées, on n'a rien eu à faire !

En résumé, vous créez des variables de session comme vous créeriez des variables normales, sauf que vous mettez le préfixe $_SESSION devant pour que PHP sache qu'il doit "retenir" ces variables sur toutes les pages.

Enfin, si vous voulez détruire la session du visiteur, vous pouvez faire un lien "Déconnexion" qui amène vers une page qui fait appel à la fonction session_destroy()

Quoiqu'il en soit, la session sera automatiquement détruite au bout d'un certain temps d'inactivité. Et voilà, vous savez tout ce qu'il faut, ce n'est vraiment pas bien compliqué.

Concrètement, les sessions peuvent servir pour :

• Un script qui demande un login / mot de passe pour qu'un visiteur puisse se "connecter" (s'authentifier). Ainsi, on peut enregistrer des variables de session et se souvenir du login du visiteur sur toutes les pages du site !

• ... Ce qui permet d'ailleurs de créer une zone d'administration sécurisée sur plusieurs fichiers SANS utiliser de .htaccess. Les variables de sessions sont suffisantes pour vérifier si le mot de passe est le bon.

• Un dernier exemple : on se sert des sessions sur les sites de vente en ligne. Cela permet de gérer un "panier" : on retient les produits que commande le client, quelle que soit la page où il est. Lorsqu'il valide sa commande, on récupère ces informations et on le fait payer !

Si je vous dis ça, c'est en connaissance de cause, parce que j'ai déjà réalisé un site de vente en ligne. En utilisant les sessions, c'est vraiment super simple et vous avez maintenant le niveau. Je vais m'arrêter là pour les explications sur les sessions... En effet, avec ça vous savez tout ce qu'il faut.

Toutefois, il manque quelque chose : un exemple d'utilisation des sessions (un TP quoi).

Pour ça, ne vous en faites pas : je vous ferai utiliser les sessions un peu plus tard dans ce cours, mais il faut d'abord que l'on voie d'autres choses.

Bien, on passe aux cookies maintenant !

Documents relatifs