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.

Documents pareils