Conserver la trace d'un utilisateur

Le protocole HTTP étant un protocole sans état, le serveur ne garde pas trace de l'identitéde ses visiteurs. Il n'est donc pas capable lorsqu'il reçoit une nouvelle requête, de savoir si elle provient de quelqu'un qui s'est déjà connecté.

Pour y parvenir, il est nécessaire de faire suivre de page en page une information permettant d'identifier l'utilisateur.

Cookies

La solution la plus communément adoptée consiste à stocker chez le client une information qu'on pourra lui demander de renvoyer lorsqu'il fera une nouvelle demande de page.

De telles informations sont appelés cookies et peuvent être de deux types :

Exemple :

<html>

<head>

<title>cookies</title>

</head>

<body>

<p>Pour un meilleur service, veuillez vous présenter :</p>

<form method="POST" action="reponse_cookies.asp">

   <p>Nom   <input type="text" name="Nom" size="20"></p>

   <p><input type="submit" value="Envoyer" name="B1">

   <input type="reset" value="Effacer" name="B2"></p>

</form>

</body>

</html>

Affichage de la page

Page de réponse et test du cookie (code ASP)

<%

   Response.Cookies("Nom") = Request.form("Nom")

   Response.Cookies("Nom").Expires = Date+365

   Response.Cookies("Nom").Path = "/tutorial"

%>

<html>

<head>

<title> reponse_cookies.asp</title>

</head>

<body>

<p>Mr <%=Request.Cookies("Nom")%></p>

</body>

</html>

Affichage de la page

Commentaires:

  1. Sur la première page nous commençons par effectuer un test pour voir s'il existe un cookie : <%If Request.Cookies("Nom") = "" Then%>.
  2. S'il n'existe aucun cookie, on affiche un formulaire qui demande le nom de l'utilisateur, en suite on l'oriente vers la page confirmation.asp.
  3. S'il existe un cookie on affiche le nom de la personne avec Request.Cookies("Nom").
  4. Sur la page confirmation.asp on affecte le cookies nom en récupérant le contenu du champ nom avec request.Form("Nom").

On introduit la date d'expiration du cookie à jour j + 365 avec la fonction : Response.Cookies("Nom").Expires = Date+365

  1. On affiche le cookies avec Request.Cookies("Nom")

Solution simplifiée : l'objet Session

Si l'on a besoin d'utiliser un grand nombre de paramètres pour réaliser un suivi de session adapté à ses besoins (identité de l'utilisateur, contenu d'un panier d'achat, ...) on est amené à stocker un grand nombre de cookies qui vont devoir faire d'incessants aller-retour sur le réseau.

Les langages de scripts actuels proposent une solution simplifiée du problème, qui évite tout ce trafic, en stockant chez l'utilisateur un seul cookie qui sert de clé dans une base de données locales pour accéder à diverses informations stockées sur le serveur pendant le temps de la session.

C'est l'objet des objets Session d'ASP ou de PHP.

Gestion manuelle de la session

L'utilisation de cookies résidant sur le poste de l'utilisateur (enregistré sur son disque) permet de faire un suivi à long terme de l'utilisateur, d'enregistrer ses préférences, ...

Bien qu'un cookie ne soit normalement accessible qu'au serveur qui l'a créé, il n'est pas vraiment difficile d'explorer le disque d'un utilisateur à la recherche de cookies pour traquer ses habitudes (ceci ne fonctionne qu'avec les cookies permanents). C'est pour cette raison que de nombreuses personnes désactivent dans leur navigateur l'utilisation de cookies, empêchant ainsi d'utiliser les techniques précédentes pour réaliser un suivi de session. Pour être sûr de pouvoir le faire, il faut travailler autrement et gèrer de façon manuelle le suivi de connexion.

L'approche la plus simple consiste à transmettre au client un identifiant que l'on retournera au serveur en le passant en paramètre de l'url, sous la forme <url>?id=#AB1608F34. Cet identifiant pourra être utilisé comme une clé pour accéder à une base de données locale dans laquelle on pourra stocker toutes les informations nécessaires.

Le langage PHP permet d'automatiser cette méthode en proposant un suivi transparent de la connexion.