Travaux Pratiques de PHP no4

Transcription

Travaux Pratiques de PHP no4
Travaux Pratiques de PHP no4
Cours d’Informatique de première Année
—IMAC—
Les sessions
Ce tp vous aidera à implémenter une partie très importante voire la plus importante
de votre projet.
x Exercice 1. Les cookies
Un cookie est un petit fichier (max 4ko) enregistré sur le disque dur du visiteur qui permet
de stocker une valeur, par exemple l’identifiant de l’utilisateur. Pour créer un cookie il suffit
d’utiliser la fonction ???, à vous de trouver sur www.nexen.net ou sur php.net. Lisez bien la
page de documentation.
1. Implémentez un script qui crée un cookie dont la durée de vie est de 15 minutes et stocker
une certaine valeur (votre login, votre plat préféré ou votre station de ski préférée etc.).
2. Vérifiez que votre navigateur est paramétré pour accepter les cookies et profitez-en pour
consulter (dans le cookie manager de votre navigateur) les informations contenues dans
le cookie que vous venez de créer.
3. Dans une deuxième page, récupérez cette valeur (si elle est bien définie) grâce au tableau
global $_COOKIE[]
4. Puisque vous avez bien lu la doc, vous savez comment créer un cookie de session c’està-dire qui durera jusqu’à ce que vous fermiez votre navigateur
5. Pour la même raison que précédement, vous savez comment supprimer votre cookie,
vérifiez dans le cookie manager que celui-ci a bien été détruit.
Les cookies présentent un certain nombre d’inconvénients. Premièrement votre visiteur
peut avoir configuré son navigateur afin de refuser les cookies (voire les niveau de confiance
sur IE). Deuxièmement les cookies sont des fichiers textes il est donc facile de l’éditer et de
le modifier.
Aussi, il est déconseillé d’utiliser les cookies (seuls) pour gérer les sessions (à cause du
premièrement) ou pour stocker des données sensibles (à cause du deuxièmement).
Ils serviront principalement lorsque l’on souhaitera conserver des informations sur le long
terme (d’une visite à l’autre).
1
x Exercice 2. Les sessions
Php propose des fonctions dédiées à la gestion des sessions ce qui aura pour effet de nous
faciliter grandement la tâche. La fonction session_start() détecte les utilisateurs et leurs
associe un identifiant unique, via cet identifiant il sera possible de stocker les informations
(appelées variables de session) associées à celui-ci (par exemple le login et le mot de passe).
Les variables sont stockées sous forme de fichier dans le répertoire /tmp du serveur.
Pour chaque page nécessitant une identification il faudra faire appel à session_start()
qui soit conserve le numéro d’identification préalablement attribué soit en définit un nouveau.
Recopiez et exécutez le code suivant:
$session = array(’session.save_path’=>ini_get(’session.save_path’),
’session.name’=>ini_get(’session.name’),
’session.use_cookies’=>ini_get(’session.use_cookies’),
’session.use_trans_sid’=>ini_get(’session.use_trans_sid’),
);
print_r($session);
Ceci vous permet de connaı̂tre quelques options de configuration de php (présentes dans
le fichier php.ini. Vous pouvez constater que l’option session.use_cookies a pour valeur
1, cela signifie que le numéro d’identification est transmis pas défaut via les cookies (la
fonction setcookie() est appelée implicitement par session_start()). Le paramètre
session.use_trans_sid étant à 1 dans php.ini, l’id de session est transmis de manière
transparente. C’est-à-dire: si le cookie n’est pas accepté par le navigateur de l’utilisateur l’id
de session est automatiquement transmis via l’url. Cela est donc on ne peut plus simple.
Attention, comme pour la fonction setcookie() il faut que l’appel à session_start()
ait lieu avant tout affichage. Le cookie généré ici a une date d’expiration définie à 0, ce
cookie sera donc détruit dés la fermeture du navigateur. Il serait possible de modifier cette
date en changeant le paramètre session.cookie_lifetime du fichier php.ini mais cela est
impossible sur le serveur etudiant.
La fonction session_start() ne permet pas de transmettre l’id de session
via une redirection ou si vous devez utiliser une url absolue.
Dans ces conditions vous devez transmettre cette information à la main.
Pour ce faire 2 possibilités, il faut écrire soit ’ma_page.php?’.session_name().’=’.session_id() soit
’ma_page.php?’.strip_tags(SID). La constante SID est vide si le cookie a été accepté
et session_name()=session_id() sinon.
1. Créez une page démarrant une session et affichez le nom et l’ID de session correspondant.
2. Ouvrez le cookie manager de votre navigateur pour constater la création du cookie de
session.
3. Toujours dans cette page, créez 1 variable de session $_SESSION[’login’] et attibuez lui une valeur quelconque. Créer 3 liens qui pointent vers une deuxième
page qui affichera le nom et l’id de session et la valeur de la variable de
session $_SESSION[’login’].
Le premier lien sera un lien simple classique
2
<a href="page2.php"> Les 2 autres reprendront les méthodes de transmission à la
main vues plus haut. Comparez les url selon que vous acceptiez ou non les cookies.
4. Désactivez la variable de session.
5. Détruisez complétement la session.
x Exercice 3. Un système d’identification
En résumé:
• pour conserver des informations d’une visite à l’autre: utilisez les cookies.
• pour conserver des informations de page en page au cours d’une visite: utilisez les
sessions.
• pour transmettre des informations d’une page à une autre: passage par url
(mapage?ma_var=ma_val). Attention à la sécurité, il faut effectuer des tests sur les
valeurs prises par les variables.
• pour transmettre des informations d’une page à une autre avec un formulaire: champ
caché (type hidden). Attention à la sécurité, il faut effectuer des tests sur les valeurs
prises par les variables.
Maintenant c’est à vous de jouer pour imaginer et implémenter un système d’identification
et de suivi d’utilisateur.
3