Les cookies en PHP

Le but de la conception des cookies était au départ de pouvoir ajouter à la fonctionnalité du protocole HTTP la possibilité d'établir un lien entre les différentes requêtes. Les cookies nous offrent la possibilité de retenir des informations sur un visiteur. On pourra ainsi enregistrer des données associées à un utilisateur particulier.

Grâce aux cookies, on peut par exemple retenir le login et le mot de passe d'un utilisateur pour lui éviter d'avoir à le ressaisir lors de sa prochaine connexion. A l'aide des cookies, on pourra aussi identifier chaque utilisateur de façon unique lors de ses visites. Ces informations pourront être utilisées à des fins statistiques (traçabilité).

Envoi d'un cookie avec PHP

Lorsque vous demandez une page web, le serveur envoie une valeur avec la page qu'il vous demandera de renvoyer lors de vos prochains échanges. Il est toutefois possible de ne pas les accepter. La plupart des navigateurs, ont des options pour refuser les cookies.

Les cookies sont en réalité des fichiers texte stockés par le navigateur sur l'ordinateur de l'utilisateur, à la demande du serveur.

Si vous ne fixez pas une durée d'expiration pour les cookies, les informations seront stockées dans la mémoire vive de l'ordinateur. Dans le cas contraire, un fichier sera créé sur le disque dur du visiteur. Il s'agit d'un simple fichier texte qui est lisible à partir d'un simple bloc note.

La fonction PHP setcookie() permet de définir un cookie. On doit appeler cette fonction avant toute balise HTML ou Header, parce que les cookies doivent passer avant tout autre en-tête. Sinon non seulement le cookie ne sera pas envoyé, mais en plus vous aurez le message d'erreur suivant :

Warning : Cannot send session cookie, header already sent.

Voici un exemple simple d'envoi de cookies

<?php
setcookie('moncookie',8)
?>
<html>
<head>
<title>Titre</title>
</head>
<body>
<p>
Vous avez envoyé un cookie
</p>
</body>
<html>

Le premier paramètre de la fonction setcookie correspond au nom du cookie, le deuxième à sa valeur. Mais la fonction peut aussi avoir d'autres paramètres comme la date d'expiration, le chemin d'accès, etc :

setcookie('moncookie', 5, mktime(11,33,00,04,01,2008),'/cookies');

Microsoft Internet Explorer stocke les cookies dans un dossier temporaire de windows (C:\Documents and Settings\votre_login\Local Settings\) .

Voici un exemple de contenu d'un fichier de cookies par exemple :

moncookie
5
www.domaine.com/cookies
1024
448989986
31538642
3662392528
29605282

Lecture d'un cookie

Si vous avez envoyé un cookie "moncookie" à l'aide de la fonction setcookie à partir d'un site donné, le navigateur renverra le cookie "moncookie" lorsqu'il essaiera d'accéder de nouveau à la page. Le tableau superglobal $_COOKIES permet d'accéder à tous les cookies.

<html>
<head>
<title>Titre</title>
</head>
<body>
<?php
if(isset($_COOKIE['moncookie']))
{
  echo "Le cookie envoyé s'appelle moncookie et sa valeur est : ".$_COOKIE['moncookie'];
}
else
  echo "aucun cookie n'a été trouvé sur cet ordinateur";
?>
</body>
<html>

Le tableau $_COOKIE[] est en lecture seule. Si vous ajoutez un élément au tableau, un cookie ne sera pas envoyé au navigateur. Seule l'utilisation de la fonction setcookie permet d'en envoyer un.

Validité et date d'expiration des cookies

A défaut d'une précision particulière, la durée de vie d'un cookie se limite à une session de navigateur. Cela signifie que quand vous fermez tous vos navigateurs puis que vous retournez sur la page, le cookie ne sera plus envoyé. Par contre, il sera toujours possible, à partir du serveur, d'en renvoyer un, et de rétablir le 'dialogue'.

Pour avoir un cookie permanent, on doit spécifier une date d'expiration sous forme de timestamp.

Limitation des cookies

Limitation aux niveaux du navigateur

Il est convenu qu'il ne faut pas dépasser la limite de 20 cookies par domaine et de 4 ko par cookie. Il est donc impossible d'utiliser les cookies pour stocker de longs textes ou des images.

De plus, les utilisateurs deviennent de plus en plus sensibles aux intrusions. Par conséquent les navigateurs sont maintenant dotés d'un filtre à cookies. Au cas où vos cookies sont trop volumineux, trop nombreux, ou ayant des dates d'expiration trop loin, il est possible que le navigateur décide de ne pas les stocker. Si la restriction ne vient pas du navigateur lui-même, c'est l'utilisateur qui le configure de façon à ce qu'il y ait un contrôle total sur les cookies voir même les refuser.

Il ne faut donc pas trop compter sur les cookies pour les informations critiques ou pour des fonctionnalités importantes

Insécurité

Le faite qu'un cookie soit retenu en mémoire et qu'il peut être lu facilement constitue une grande menace pour la sécurité des données. Afin de préserver la sécurité, il est vivement déconseiller de mettre une quelconque information confidentielle dans un cookie.

Il est donc exclu d'y stocker un mot de passe. En effet, quelqu'un de malveillant ayant accès à la machine pourra lire les informations. Ce qui fait que l'utilisation des cookies se limitent aux statistiques à l'assistance à l'utilisateur, ou au stockage des préférences d'affichage du site.

Recevez par email nos prochains conseils

Oseox sur Facebook Notifications via Facebook Oseox sur Twitter Notre actu sur twitter

Une question ? Venez la poser sur notre forum développement web !

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence Aseox.