Lorsqu’on élabore un site web interactif, on souhaite fréquemment que la personne visitant le site puisse s’identifier et fournir un certain nombre de renseignements tout au long de sa visite dans différentes pages (l’exemple type est le remplissage d’un caddie au cours de la consultation d’un site commercial), toutes ces informations étant conservées quelque part jusqu’à la fin de sa visite. Et il faut bien entendu réaliser cela indépendamment pour chaque client connecté, car nous ne pouvons pas oublier qu’un site web est destiné à être utilisé en parallèle par toute une série de personnes.
Il serait possible de transmettre ces informations de page en page, à l’aide de champs de formulaires cachés (balise <INPUT type="hidden">), mais ce serait compliqué et très contraignant. Il est donc préférable que le serveur soit doté d’un mécanisme spécifique, qui attribue à chaque client une session particulière, dans laquelle seront mémorisées toutes les informations particulières à ce client. CherryPy réalise cet objectif par l’intermédiaire de cookies.
Un cookie est un petit fichier que le serveur enregistre sur l'ordinateur du client. Ce fichier contient du texte et permet de «retenir» des informations sur le visiteur. Un cookie peut être utilisé pour maintenir les données relatives à l'utilisateur durant sa navigation, mais aussi à travers plusieurs visites. Les cookies ont été introduits pour donner un moyen d'implémenter les paniers d'achat électronique, un dispositif virtuel dans lequel l'utilisateur peut accumuler les articles qu'il veut acheter durant sa navigation sur le site. Le serveur web envoie au navigateur de l'utilisateur un cookie contenant un identifiant de session unique. Le navigateur web renvoie alors cet identifiant de session à chaque requête suivante et les articles du panier sont enregistrés et associés avec ce même identifiant unique de session.
Beaucoup de sites web utilisent les cookies pour la personnalisation basée sur les préférences des utilisateurs. Les utilisateurs sélectionnent leurs préférences dans un formulaire et envoient celles-ci au serveur. Le serveur encode les préférences dans un cookie et renvoie celui-ci au navigateur. Par la suite, à chaque fois que l'utilisateur accède à une page de ce site, le navigateur renvoie le cookie et donc la liste des préférences; le serveur peut alors personnaliser la page d'après les préférences de l'utilisateur. Par exemple, le moteur de recherche Google permet à ses utilisateurs (même s'ils ne sont pas enregistrés) de choisir le nombre de résultats qu'ils veulent voir sur chaque page de résultats.
Liste des cookies affichables dans Firefox via le menu Préférences/ViePrivée/Supprimer des cookies spécifiques
Lorsqu’un nouveau visiteur du site se présente, le serveur génère un cookie contenant un identifiant de session unique (sous la forme d’une chaîne aléatoire d’octets) et l’envoie au navigateur web, qui l’enregistre. En relation avec le cookie généré, le serveur va alors conserver durant un certain temps un objet-session dans lequel seront mémorisées toutes les informations spécifiques du visiteur. Lorsque celui-ci parcourt les autres pages du site, son navigateur renvoie à chaque fois le contenu du cookie au serveur, ce qui permet à celui-ci de l’identifier et de retrouver l’objet-session qui lui correspond. L’objet-session reste donc disponible tout au long de la visite de l’internaute : il s’agit d’un objet Python ordinaire, dans lequel on mémorise un nombre quelconque d’informations sous forme d’attributs.
Au niveau de la programmation, voici comment cela se passe:
Il vous suffit de redemander la page produite par ce script à plusieurs reprises. Vous constaterez qu’à chaque fois le compteur de visites est bien incrémenté :
Exécution du script ci-dessus
Le script lui-même devrait être assez explicite. On y remarquera que le module CherryPy est doté d’un objet session qui se comporte (apparemment) comme un dictionnaire classique. Nous pouvons lui ajouter des clefs à volonté, et associer à ces clefs des valeurs quelconques.
Remarquez que la méthode get() des dictionnaires, pour retrouver la valeur associée à la clef count (ou zéro, si la clef n’existe pas encore). Nous ré-enregistrons ensuite cette valeur, incrémentée, dans le même dictionnaire. Ainsi nous pouvons constater une fois de plus que CherryPy met à notre disposition un environnement de programmation tout à fait familier pour un habitué de Python.
Remarquons toutefois que l’objet session, qui se comporte pour nous comme un simple dictionnaire, est en réalité l’interface d’une machinerie interne complexe, puisqu’il nous «sert» automatiquement les informations qui correspondent à un client particulier de notre site, identifié par l’intermédiaire de son cookie de session.
Pour bien visualiser cela, faites donc l’expérience d’accéder à votre serveur depuis deux navigateurs différents (Firefox et Internet Explorer, par exemple) : vous constaterez que le décompte des visites est bel et bien différent pour chacun d’eux.