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é
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.
ExerciceTableaux 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)