Cookies & sessions — Programmation objet avec PHP

Licence Informatique, semestre 6

Alexandre NiveauJean-Marc Lecarpentier — Judith Jeyafreeda Andrew

Enseignement des technologies du Web

 

Cookies & sessions — Programmation objet avec PHP

Notes de cours

Travail personnel

Objectifs

Ce TP commence par deux exercices d'application directe des principes des cookies et des sessions. Ils ont l'avantage de vous faire manipuler du PHP simple et réfléchir un peu au fonctionnement de HTTP.

Le troisième exercice est une introduction à l'architecture d'un site web. Il est optionnel, mais sera proposé à nouveau dans le prochain TP : il est vivement conseillé de l'avoir terminé avant les cours de la semaine prochaine, qui introduiront l'architecture de manière plus formelle.

Exercice 1 — Cookies #

Un corrigé de cet exercice est disponible (version simple ; avec formulaire ; archive du code).

  1. Écrire un script PHP qui crée une page HTML simple, avec un titre et un peu de texte.
  2. Créer deux fichiers CSS pour cette page, defaut.css et special.css, qui donnent des rendus très différents (par exemple différentes couleurs de fond).
  3. En utilisant les cookies, faire en sorte que le CSS utilisé soit defaut.css lors de la première visite d'un·e internaute, et special.css si l'internaute a déjà visité la page il y a moins d'un an.
  4. Modifier le code précédent, pour que le site ne se souvienne de l'internaute que pendant une minute.
  5. Ouvrir l'outil « Réseau » de Firefox (menu > Développement web > Réseau ; raccourci : control-shift-E), et observez le cookie transmis dans les en-têtes HTTP de la requête.
  6. Toujours dans l'outil « Réseau », utiliser le bouton « Modifier et renvoyer » de l'onglet « En-têtes » pour renvoyer une requête en modifiant le cookie. Attention, le résultat de la requête modifiée n'est visible que dans l'onglet « Réponse » (la page elle-même n'est pas actualisée). Essayer également de supprimer le cookie. Conclure sur la confidentialité et la sécurité de l'utilisation des cookies.
  7. Optionnel : Ajouter un formulaire sur la page permettant à l'internaute de choisir le fichier CSS qu'il ou elle préfère, et faire en sorte que ce choix soit enregistré pendant 30 minutes.

Exercice 2 — Sessions PHP #

Un corrigé de cet exercice est disponible (archive du code).

  1. En utilisant les sessions PHP, écrire un script qui crée une page HTML indiquant le nombre de visites de l'internaute, en suivant ce modèle.
  2. Ajouter à la page un bouton ou un lien qui permet de remettre le compteur à zéro.
  3. Ouvrir l'outil « Réseau » de Firefox (menu > Développement web > Réseau ; raccourci : control-shift-E), et observez le cookie de session transmis dans les en-têtes HTTP de la requête. Comment s'appelle-t-il ?
  4. L’utilisation du nom par défaut pour le cookie de session est déconseillée : il vaut mieux mettre un nom spécifique à votre application, ce qui permet de faire tourner plusieurs applications sur le même serveur sans risque qu'elles modifient les données les unes des autres. Modifier le nom du cookie de session (et vérifier que cela a bien pris effet).
  5. Dans l'outil « Réseau », utiliser le bouton « Modifier et renvoyer » de l'onglet « En-têtes » pour renvoyer une requête en supprimant le cookie. Attention, le résultat de la requête modifiée n'est visible que dans l'onglet « Réponse » (la page elle-même n'est pas actualisée). Que se passe-t-il ? Essayer également de modifier la valeur de l'identifiant. Quelle est la différence par rapport à si on avait utilisé un simple cookie nb-visites ?

Exercice 3 (optionnel) — Architecture d’un site simple #

Une proposition de correction de cet exercice est disponible : première partie (archive), deuxième partie (archive).'

Récupérer cette archive. Elle contient un répertoire poemes, qui lui-même contient

  • un répertoire textes, avec les textes de quatre poèmes
  • un répertoire images, avec les images des poètes
  • un fichier donnees.php, qui déclare un tableau contenant des informations sur les poèmes (auteur, titre, image correspondante)

Le but de l'exercice est de réaliser un site présentant ces quatre poèmes. Un site plus conséquent utiliserait évidemment une base de données ; un des objectifs est de vous faire manipuler les tableaux PHP, et de vous faire travailler sur l'architecture d'un site indépendamment des problèmes spécifiques aux BD (connexion, erreurs de requêtes, etc.).

Pour simplifier l'énoncé et l'exercice, on va utiliser un paramètre d'URL pour choisir le poème à afficher. Ce choix vous semble-t-il pertinent ?

Première partie : un site fonctionnel

  1. Placer le répertoire poemes sur le serveur, et créer un fichier index.php dans le répertoire. Mettre un modèle de page HTML de base dans le fichier index.php. Dans toute cette partie, on ne modifiera que ce fichier index.php.
  2. Inclure le fichier donnees.php depuis le fichier index.php. On va ainsi pouvoir accéder aux informations sur les poèmes.
  3. Afficher une liste des titres des poèmes.
  4. Récupérer le paramètre poeme dans l'URL, et si sa valeur correspond à l'une des quatre clefs (boheme, correspondances, bois, automne), alors on va afficher la page du poème correspondant : pour l'instant, afficher le titre du poème comme titre principal de la page (h1) et dans l'élément title de l'en-tête HTML.
  5. Ajouter à la page le texte du poème correspondant, et le nom de l'auteur en-dessous.
  6. Ajouter l'image correspondante, avec comme texte alternatif le nom de l'auteur.
  7. Transformer la liste des titres de poèmes en une liste de liens : un clic sur un poème mène à la « page » correspondante.
  8. Faire en sorte que s'il n'y pas de paramètre poeme dans l'URL, un message d'accueil soit affiché.
  9. Faire en sorte que si la valeur du paramètre poeme dans l'URL est erronée, un message d'erreur soit affiché.

Deuxième partie : une meilleure architecture

À ce niveau-là, le mini-site doit fonctionner correctement. Il n'est cependant pas très propre, car on a mélangé la logique et l'affichage. Pour bien faire, il faut séparer notre fichier en deux morceaux.

  • index.php va être le contrôleur, il ne s'occupera que d'analyser l'URL pour déterminer le poème désiré et récupérer les informations correspondantes dans les données. Il ne devra rien afficher lui-même : une fois son travail terminé, il se contentera d'inclure l'autre fichier.
  • On va créer un fichier squelette.php, qui au contraire ne s'occupera que de l'affichage. Il contiendra une page HTML « à trous » (on parle de template) : on n'utilisera PHP que pour afficher des variables. Les variables seront remplies au préalable par le contrôleur.

Créer un squelette pour les pages affichant un poème, et modifier index.php pour qu'il se comporte comme un contrôleur tel que décrit ci-dessus.

Créer un squelette pour les autres pages (accueil et erreur) si nécessaire, et adapter index.php.

Pour les rapides : compléments (optionnels)

Ajouter un système de recherche, en essayant de garder une architecture propre. Dans un premier temps, l'internaute doit pouvoir retrouver un poème à partir du nom de l'auteur. Ensuite la recherche doit pouvoir porter sur le texte des poèmes.

Si vous estimez que vos squelettes partagent trop de code HTML, n'hésitez pas à extraire des fragments communs, qui seront inclus depuis plusieurs squelettes (l'exemple typique est le pied de page).