Principe

Les cookies ont été introduits dans Netscape en 1994 pour étendre les fonctionnalités du navigateur.

Ils permettent de conserver des informations côté client, à l'aide d'un fichier texte court. Les caractéristiques de ce fichier (taille, comportement, ...) dépendent de la configuration du navigateur.

Lecture et écriture

Ecriture

L'écriture dans un cookie se fait à l'aide de la fonction setcookie

<?php
	setcookie('PHP', 5, time()+86400, '/php', '.unistra.fr');
?>

Arguments de setcookie

nom
Le nom du cookie
value
contenu du cookie
expire
date d'expiration au format
path
portée du cookie; il s'agit du chemin sur le serveur, valable pour la ressource et ses descendants; La valeur par défaut est le répertoire courant où le cookie a été défini.
domain
le domaine pour lequel le cookie est disponible
secure
indique si le cookie doit uniquement être transmis à travers une connexion sécurisée HTTPS depuis le client.

Lecture

PHP récupère les valeurs du cookie grâce au tableau associatif $_COOKIE

<?php
	echo $_COOKIE['PHP'];
?>

Suppression

Comme l'accès aux données s'effectue à travers le tableau associatif $_COOKIE, la suppression d'une valeur dans un cookie se fait simplement grâce à la fonction unset

<?php
	setcookie('PHP');
	unset($_COOKIE['PHP']); // suppression locale
?>

Validité

p>Sans date d'expiration, la durée de vie d'un cookie est limitée à la session du navigateur.

La date d'expiration est au format Unix, ce qui permet de fixer une date d'expiration éloignée (mais avant 2038 pour les systèmes 32 bits).

Exercice

Dans un fichier HTML, vous créerez un cookie avec une valeur associée à la clé Exercice1.

Vous afficherez la valeur dans la même page. Au premier affichage, la valeur n'existant pas, l'affichage sera vide. Au rafraichissement de la page, la valeur sera disponible.

Ce comportement est visible dans l'exemple.

Vous vérifierez la valeur affichée par l'interface de votre navigateur.

Exercice

Tableaux et types complexes

Les cookie contiennent des données de type simple, stockées dans un tableau associatif. Pour utiliser des types complexes, on utilisera le principe de sérialisation consistant à transformer les données complexes en une représentation dans un type simple tout en conservant la structure et le type.

On utilisera la fonctions serialize et unserialize pour passer du type complexe vers le type simple et inversement.

Sérialisation

$array = array(
    "cle1" => "valeur1",
    "cle2" => "valeur2",
);

$serialisation = serialize($array);
echo $serialisation;
"valeur1", "cle2" => "valeur2", ); $serialisation = serialize($array); echo $serialisation; ?>

Le tableau a été transformé en chaîne de caractères mêlant structure et type des données sérialisées.

Par exemple :

a:2:{
Indique que l'élément sérialisé est un tableau ( a pour array) contenant deux éléments.
s:4:"cle1"
Indique une chaîne de caractères (s pour string) de longueur 4, valant cle1.

Désérialisation

$deserialisation = unserialize($serialisation);
echo $deserialisation["cle1"];

Sérialisation

Limitations et sécurité

A l'heure actuelle, les navigateurs permettent pour la plupart au moins 50 cookies par domaine (ce qui est un peu plus que la norme de 20 définie en 1997) et 4ko par cookie .

Ces dermières années, on a pu constater une augmentation des filtres par les navigateurs et/ou les utilisateurs pour des raison de protection de la vie privée notamment.

Les données contenues dans un cookie doit être réfléchies car elle sont accessibles :

  • Par l'utilisateur (donc pas de donnée comptable, nom utilisateur, etc)
  • Par un tiers sur la même machine (pas de mot de passe)