Sommaire
Transcription
Sommaire
BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 1 Objectifs : o Comprendre le principe et l'int€r‚t des cookies o Comprendre le principe et l'int€r‚t des sessions PHP o S€curiser les accƒs „ un site gr…ce „ l'utilisation de sessions Ressources : o index.html, entrer.html, gauche.html, droite.html, formulaire.html, organig.html, connect.php, identification.php o bouton1.jpg, bouton2.jpg, bouton3.jpg, logoadmove.gif, orga.jpg Sommaire I) II) Echanges d'informations entres pages d'un site ................................................. 2 1. Concept ........................................................................................................... 2 2. Les cookies ...................................................................................................... 3 a) Principe ...................................................................................................... 3 b) Exemple d'utilisation d'un cookie.................................................................... 4 c) Limites ....................................................................................................... 5 3. Les sessions ..................................................................................................... 6 a) Principe ...................................................................................................... 6 b) Exemple d'utilisation d'une session................................................................. 7 Sessions et s€curit€ d'acc•s aux sites............................................................... 11 1. Principe ......................................................................................................... 11 2. Mise en œuvre................................................................................................ 11 BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP I) Fiche 7 – Les cookies et les sessions - Page 2 Echanges d'informations entres pages d'un site 1. Concept Lorsque vous cr€ez un site web, vous avez rapidement besoin de stocker et d'afficher des informations sur vos utilisateurs pour les distinguer, g€rer leurs droits d'accƒs aux bases de donn€es, m€moriser certaines informations (cas des "paniers" des sites marchands, par exemple). Le problƒme principal est que le protocole http ne conserve pas d’informations sur la communication entre un programme client et un programme serveur. Ainsi, lorsque vous passez d'une page „ l'autre de votre site, les informations sont "perdues". C’est comme deux personnes essayant de dialoguer mais sans jamais se souvenir des phrases pr€c€dentes. Avec des langages comme PHP, les variables n'ont qu'une dur€e de vie limit€e „ celle du script qui les appelle. D€roulement Script A Script B Port€e des variables PHP propose des m€canismes qui vont permettent d’€tablir une certaine continuit€ dans les €changes entre un client et un serveur. Il existe deux moyens de stockage d'informations. Ils se pr€sentent tous les deux sous la forme d'un fichier enregistr€ sur le disque : - Le cookie qui sera cˆt€ client - La session qui sera cˆt€ serveur Il suffit d'enregistrer les variables dans le fichier depuis le script A pour les lire ensuite dans le script B. D€roulement Script A Script B Variables Enregistrement Cˆt€ client R€cup€ration Cˆt€ serveur BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 3 2. Les cookies a) Principe Il s’agit d’une donn€e transmise par le programme serveur au programme client, celui-ci €tant charg€ de le conserver pour une dur€e d€termin€e. Les cookies sont un m€canisme d'enregistrement d'informations sur le poste client et de lecture de ces informations. Ils sont stock€s dans un fichier texte sur la machine cliente. On peut cr€er des cookies „ partir d’une application PHP gr…ce „ la fonction setCookie(), plac€e dans l’ent‚te du message http. Cette fonction doit donc ‚tre plac€e avant toute balise <html> ou <head>. <?php setCookie( "nomCookie", "valeur", dateExpiration, "path", "domain", sÄcurisÄ ); ?> La date d'expiration indique la date (date et heure) aprƒs laquelle le cookie expire. Au-del„ de cette date, le cookie dispara‰t du poste client. A noter : si vous ne sp€cifiez pas ce paramƒtre, le cookie expirera „ la fin de la session (lorsque le navigateur sera ferm€). Dƒs que le navigateur reŠoit (et accepte) un cookie venant d’un serveur, il renvoie ce cookie au serveur. Ce programme est relativement s€curis€ puisque seul le programme serveur qui a cr€€ un cookie peut y acc€der (un autre serveur ne peut pas s’emparer des informations contenues dans ce cookie). Les valeurs des cookies sont accessibles par le biais du tableau associatif $_COOKIE. <?php setCookie( "visiteur", "Goliath", time()+3600); echo "Vous ‚tes : ".$_COOKIE['visiteur']; ?> La suppression d'un cookie s'effectue par la fonction setCookie(). <?php setCookie("visiteur"); ?> BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP b) Fiche 7 – Les cookies et les sessions - Exemple d'utilisation d'un cookie Copiez le contenu du dossier fiche6 qui vous est fourni dans votre alias. Voir le fichier SetCookie.php <?php // Est-ce que le Cookie existe ? if (isSet($_COOKIE['compteur'])) { $message = "Vous ‚tes d€j„ venu ".$_COOKIE['compteur']." fois me rendre visite<BR>\n"; // On incrÄmente le compteur $valeur = $_COOKIE['compteur'] + 1; } else { // Le cookie n'existe pas: il faut le crÄer avec la valeur 1 $message = "Bonjour, je vous envoie un cookie<BR>\n"; $valeur = 1; } /* Envoi du cookie (on mÄmorise la nouvelle valeur du cookie avec une date d'expiration Ägale Å date courante + 1 heure */ SetCookie ("compteur", $valeur, time()+3600); ?> <HTML><HEAD> <TITLE>Les cookies</TITLE> </HEAD> <BODY> <H1>Un compteur d'accƒs au site avec cookie</H1> <!-- On affiche le message --> <?php echo $message; ?> </BODY></HTML> Page 4 BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP c) Fiche 7 – Les cookies et les sessions - Page 5 Limites Le problƒme majeur du cookie est que le client a le pouvoir de le refuser. M‚me si c'est devenu une exception, votre application risque donc de ne pas pouvoir fonctionner. Il y a aussi des risques plus graves quant „ la s€curit€ : - L'usurpation d'identit€, car ce fichier peut ‚tre recopi€ facilement sur un autre ordinateur. - La manipulation, car le cookie n'est qu'un simple fichier texte dont il est alors ais€ de changer les informations. La session n'aura donc pas cet inconv€nient puisque tout est g€r€ sur le serveur de l'application auquel le client n'a pas accƒs directement. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 6 3. Les sessions a) Principe Une session est en quelque sorte l'€quivalent du cookie avec quelques diff€rences. En effet, une session est un fichier stock€ „ l'inverse du cookie non pas sur le disque du visiteur mais sur le serveur. Une session est personnelle „ chaque visiteur (un fichier par visiteur), et permet, comme le cookie, de stocker temporairement des variables. Quand un internaute arrive pour la premiƒre fois sur le site, on lui attribue un identifiant unique, appel€ "identifiant de session". Cet identifiant est soit stock€ dans un cookie du poste client, soit propag€ dans l'URL. A chaque accƒs suivant, on est capable de reconna‰tre l'internaute par son identifiant et on peut m€moriser les informations le concernant dans une ou plusieurs tables. Quand la session est termin€e, on peut valider d€finitivement l'ensemble des actions effectu€es par l'internaute. Attention : le m€canisme des sessions ne fonctionne que depuis PHP version 4 PHP fournit un ensemble de fonctions pour faciliter la gestion des sessions Fonction session_start( ); session_id( ); session_name( ); unset($_SESSION['nomVar']) session_destroy( ); session_unset( ); Usage D€marrage d'une session Attention pas de html avant session_start() Num€ro de session en cours Nom de la session Destruction de la variable de session nomVar Destruction de la session en cours Destruction de toutes les variables pour la session en cours Le m€canisme des sessions est vraiment extr‚mement simple. Tout ce que vous devez faire, c'est syst€matiquement demander au compilateur PHP de d€marrer une session pour le client. <?php session_start(); ?> Cette commande doit ainsi toujours figurer sur chacun des scripts utilisables par la session, et doivent imp€rativement constituer la premiƒre ligne du script. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP b) Fiche 7 – Les cookies et les sessions - Page 7 Exemple d'utilisation d'une session Voici un exemple d'enchainement de scripts „ travers une session : l'utilisation d'une session va nous permettre de passer des informations d'un script „ l'autre. Page1.php <?php session_start(); ?> <html> <body> <form method="POST" action="page2.php"> Entrez votre nom : <input type="TEXT" name="nom"> <input type="SUBMIT" value="OK"> </form> </body> </html> Vous avez ici le d€marrage de la session puis un simple formulaire HTML qui va poster au script page2.php le contenu de la variable nom. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 8 Page2.php <?php session_start(); $_SESSION['nom'] = $_POST['nom']; ?> <html> <body> Bienvenue sur ce site <b> <?php echo $_SESSION['nom']; ?> </b>.<br /> Regardons ce qui se passe sur la <a href="page3.php">page</a> suivante.<br /> </body> </html> Dans ce script, nous avons le d€marrage de la session puis l'enregistrement dans une variable de session appel€e nom de la valeur post€e par le formulaire. Cela permet de r€cup€rer la valeur saisie sur la page 1 dans une 3ƒme page. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 9 Page3.php <?php session_start(); ?> <html> <body> Vous ‚tes toujours parmi nous <b> <?php echo $_SESSION['nom']; ?> </b>.<br /> </body> </html> Dans ce script nous avons toujours le d€marrage de session avec cette fois, la r€cup€ration de la variable nom depuis le tableau associatif de sessions $_SESSION. Nous proc€dons enfin „ l'affichage de la variable dans une phrase. Remarques Si l'identifiant de session est transmis au client sous forme de cookie, il sera valide, par d€faut, jusqu'„ ce que l'internaute ferme son navigateur. Mais il est possible de param€trer la dur€e de validit€ de cet identifiant de session (donc du cookie) dans le fichier de configuration php.ini (paramƒtre session.cookie_lifetime). Par d€faut, les variables de sessions sont enregistr€s cˆt€ serveur dans le r€pertoire c:\wamp\tmp, dans un fichier dont le nom comporte l'identifiant de session. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Identifiant de la session Fichier contenant la variable de session enregistr€e dans la page 2 pr€c€dente : Nom de la variable de session Valeur de cette variable Page 10 BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 11 II) Sessions et s€curit€ d'acc•s aux sites Le m€canisme des sessions est id€al pour les pages WEB „ accƒs restreint qui demandent „ l'utilisateur voulant les visiter de s'identifier „ l'aide d'un mot de passe. En effet, si un utilisateur conna‰t l'URL de la deuxiƒme page du site (ici entrer.html), il peut trƒs facilement court-circuiter la page de login (index.html). 1. Principe Pour toutes les pages du site, sauf la premiƒre, il conviendra de tester la pr€sence d'une variable qui indiquera qu'un utilisateur est bien pass€ par la page de connexion et qu'il s'est bien connect€. Pour illustrer cela nous allons reprendre le cas trait€ dans la fiche 5. Tous les fichiers sont disponibles dans le dossier monSite du r€pertoire fiche6. Voyons quelles sont les modifications „ apporter pour mettre en place les sessions dans cette mini application. 2. Mise en œuvre Les modifications ƒ apporter : Page d'accueil du site index.html : aucune modification Script de contrˆle de l'identit€ de l'utilisateur identification.php : Dans le cas o‹ la connexion est possible, c'est-„-dire si le mot de passe et le nom d'utilisateur sont exacts, il faut : Ajouter le d€marrage d'une session : session_start() Cr€er une variable de session et l'initialiser Par exemple : $_SESSION['ok']="oui"; Affichage d'une page (attente.php) indiquant „ l'utilisateur connect€ d'attendre 5 secondes avant d'‚tre redirig€ sur le site Message de r€ussite „ l'authentification (affichage en utilisant une CSS) R€cup€ration de la variable contenant le nom lors de l'identification BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 12 Pour rediriger sur une page on peut utiliser sur la fonction header('Location:….'); Par contre si vous d€sirez utiliser un temps d'attente avant la redirection utilisez plutˆt la syntaxe <meta http-equiv='refresh' content='durÄe en seconde;URL=nom de la page Å charger'> Charger le fichier entrer.php en lieu et place du fichier entrer.html (ce fichier devra en effet contenir du code PHP pour tester la session et donc obligatoirement avoir une extension .php) Id€e g€n€rale du code dans le fichier connexion.php else { // D€marrage d'une session ……………………………………….. // Cr€ation d'une variable de session $_SESSION['ok']="oui"; //Page d'attente include("……………………………………………"); // Redirection vers la page d'entr€e du site echo" <meta http-equiv='refresh' content='……..;URL=………………………'> "; // On quitte le script courant sans effectuer les €ventuelles instructions qui suivent exit; } Renommer toutes les pages html (sauf la page d'entr€e index.html et la page formulaire.html qui elle, ne n€cessite pas une identification pr€alable) avec une extension .php et dans chacune d'elle, tester la pr€sence de la variable de session cr€€e par le script connexion.php. Voir ci-aprƒs l'id€e g€n€rale de la modification „ apporter. Note : dans le fichier entrer.php pensez „ indiquer que la page de droite se nomme d€sormais droite.php et celle de gauche gauche.php Id€e g€n€rale : <?php //DÄmarrer une session Session_start(); // test vÄrifiant la prÄsence de la variable de session Si la variable ($_SESSION['ok'] != 'oui') { //redirection vers la page de connexion Header("Location: index.html"); } else ?> BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 13 Travail ƒ faire - Modifiez le script identification.php en incluant les modifications indiqu€es page pr€c€dente. - Renommez la page droite.html en droite.php, testez l'existence de la variable de session et chargez la page index.html si cette variable n'existe pas (voir logique cidessus). - Renommez la page gauche.html en gauche.php, testez l'existence de la variable de session et chargez la page index.html si cette variable n'existe pas - Renommez la page organig.html en organig.php, testez l'existence de la variable de session et chargez la page index.html si cette variable n'existe pas - Renommez la page entrer.html en entrer.php, testez l'existence de la variable de session et chargez la page index.html si cette variable n'existe pas. Indiquez €galement que la page de droite se nomme d€sormais droite.php et celle de gauche gauche.php - Tester vos modifications - Assurez-vous qu'il n'est plus possible d'acc€der directement ƒ une page du site en tapant son URL si la session n'a pas €t€ cr€€e (c'est-ƒ-dire si le script connexion.php n'a pas €t€ ex€cut€) Fermez votre navigateur puis rouvrez-le et acc€dez „ votre application de nouveau. Sans vous identifiez, appelez la page entrer.php en tapant sont URL dans la barre d'adresses : vous ‚tes redirig€ automatiquement vers la page d'accueil. Maintenant, sans fermer le navigateur, acc€dez „ un autre site (www.google.fr, par exemple) puis appelez la page entrer.php en tapant sont URL dans la barre d'adresses. Que constatezvous ? En effet, tant que vous n'avez pas ferm€ votre navigateur, votre session reste active. Cela peut ‚tre g‚nant, voire dangereux, lorsque plusieurs utilisateurs utilisent un m‚me poste pour se connecter „ Internet. Il est donc judicieux de proposer aux utilisateurs, une d€connexion "propre" incluant la suppression de leur session. Pour cela, il suffit d'inclure un script PHP qui est charg€ de d€truire la session et les variables associ€es. BTS Informatique de Gestion (lyc€e Rostand Chantilly) Initiation au PHP Fiche 7 – Les cookies et les sessions - Page 14 Travail ƒ faire - Modifiez le script gauche.php pour ajouter un bouton au menu. Vous utiliserez l'image bouton3.jpg se trouvant dans le dossier images. Ce bouton permettra de cr€er un lien vers le script quitter.php. Vous pr€ciserez que ce script doit s'ex€cuter dans une nouvelle fen„tre et que toutes les fen„tres actives doivent „tre ferm€es (attribut TARGET de la balise <a> €gal ƒ "_top"). - Ecrire le script quitter.php qui doit permettre de : - d€marrer la session - d€truire toutes les variables de la session (Cf. tableau page 6) - d€truire la session (Cf. tableau page 6) - charger la page index.html - Testez vos modifications : connectez-vous ƒ votre site. Cliquez sur le bouton "quitter" puis appelez l'url de la page entrer.php. Que se passe-t-il ? Vous „tes automatiquement redirig€ vers la page index.php pour vous identifier.