7.PHP pour le web

7.6.Les cookies

7.6.1.Introduction

Les cookies sont des fichiers que le serveur demande au client d'écrire sur son disque dur et qui permettent à un script de sauvegarder des variables liées à l'utilisateur.
On peut par exemple vouloir savoir combien de fois une personne est venue sur votre site pour lui proposer à la dixième visite de s'inscrire à une mailing-list.
Mais attention l'utilisation des cookies est à prendre avec des pincettes ! Plusieurs risques sont liés à l'utilisation des cookies:
  • Le client peut refuser les cookies (A chaque visite vous lui direz "Bonjour, c'est la première fois que vous visitez ce site"... pas top)
  • Le client peut avoir effacé les cookies et alors d'un jour à l'autre vous avez perdu les informations
  • Le client peut changer de navigateur ou d'ordinateur d'une visite à l'autre
Les cookies ne doivent donc pas être utilisés pour des informations importantes. Une utilisation qui peut être faite consiste à remplir automatiquement un champ login qui a déjà été rempli précédemment par l'utilisateur (quoique maintenant cela est intégré aux navigateurs). Si le cookie est absent, l'utilisateur entrera manuellement le login.

7.6.2.Les cookies (avec PHP)

Il est important de savoir que la gestion du cookie doit se faire avant d'écrire une donnée dans le document HTML, attention aux espaces malencontreusement écris au début du fichier.
En PHP, nous pouvons écrire et lire dans un cookie très simplement. La demande de génération du cookie se fait par la commande setCookie().
Tous les cookies ainsi définis sont systématiquement retournées au script PHP et accéssibles dans le tableau $_COOKIE[]. Pour affecter plusieurs valeurs à un seul cookie, il suffit que le nom du cookie soit suivi de []. Voici maintenant les paramètres de la fonction setCookie():
int setCookie(string $name, string $value, int $expire, string $path, string $domain, int $secure);
seul le paramètre name est obligatoire.
  • $name est le nom du cookie, c'est une chaîne de caractères privée de ":","," et " ".
  • $value est la valeur du cookie
  • $expire est la date d'expiration du cookie (tel que peuvent le retourner les fonctions time() ou mktime()), une fois la date atteinte le cookie est supprimé ou invalidé, s'il n'est pas spécifié, le cookie expire à la fin de la session (quand le navigateur est fermé).
  • $path est le répertoire dans lequel le cookie est valide. Les sous-répertoires sont égalemnt acceptés.
  • $domain est le domaine pour lequel le cookie est valide (ex: phpfacile.com)
  • $secure indique que le cookie ne doit être transmis que par une connexion sécurisée HTTPS
Par exemple:
setCookie("login","toto",time()+3600);
va créer un cookie accessible par $_COOKIE["login"], celui-ci est valide pendant 3600 secondes.
rem
  • S'il n'y a que $name de défini alors ce cookie est supprimé.

7.6.3.Exemple de script PHP utilisant des cookies (écriture du cookie)

Ici nous allons faire un espèce de caddie utilisant des cookies. Attention, c'est pas une bonne idée pour un vrai caddie car quelqu'un qui refuserait les cookies ne pourrait pas utiliser ce script. Le premier fichier que l'on appelera cookie_init.php servira à mettre à 0 les cookies.
<?php
	setCookie("panier[pomme]", 0);
	setCookie("panier[poire]", 0);
	setCookie("panier[peche]", 0);
	setCookie("panier[banane]", 0);
	header("Location: cookie_ajout.php");
?>
On met à 0 tous les éléments du panier. On fait ensuite une redirection vers cookie_ajout.php. setCookie() et header() requièrent tous les 2 qu'il n'y ait pas de données émises avant dans le script. S'il y avait eu un espace (ou d'autres caractères) devant <?php, il y aurait eu une erreur

7.6.4.Exemple de script PHP utilisant des cookies (lecture et mise à jour du cookie)

Ce second script est l'interface du site, on met à jour le cookie juste avant d'afficher l'état du panier.
<?php
    // Lecture du cookie
    $panier = $_COOKIE["panier"];

	switch ($_GET["ajout"])
	{
		case "pomme":
			$panier["pomme"]++;
			setCookie("panier[pomme]",$panier["pomme"]);
		break;
		case "poire":
			$panier["poire"]++;
			setCookie("panier[poire]",$panier["poire"]);
		break;
		case "peche":
			$panier["peche"]++;
			setCookie("panier[peche]",$panier["peche"]);
		break;
		case "banane":
			$panier["banane"]++;
			setCookie("panier[banane]",$panier["banane"]);
		break;
	}
?>
<html>
<head>
  <meta charset="utf-8">
  <title>Le marché</title>
</head>
<body bgcolor="#FFFFFF">
<table border="4" cellspacing="4" cellpadding="4" align="center">
  <tr align="center"> 
    <td>Ajouter</td>
    <td>Votre commande</td>
  </tr>
  <tr align="center"> 
    <td><a href="cookie_ajout.php?ajout=pomme">1Kg pommes</a> (1E)</td>
    <td><?echo $panier["pomme"]?>Kg pomme(s)</td>
  </tr>
  <tr align="center"> 
    <td><a href="cookie_ajout.php?ajout=poire">1Kg poire</a> (1,5E)</td>
    <td><?echo $panier["poire"]?>Kg poire(s)</td>
  </tr>
  <tr align="center">
    <td><a href="cookie_ajout.php?ajout=peche">1Kg p&ecirc;che</a> (2E)</td>
    <td><?echo $panier["peche"]?>Kg p&ecirc;che(s)</td>
  </tr>
  <tr align="center">
    <td><a href="cookie_ajout.php?ajout=banane">1Kg banane</a> (1E)</td>
    <td><?echo $panier["banane"]?>Kg banane(s)</td>
  </tr>
</table>
<p align="center"><a href="cookie_init.php">vider mon panier</a></p>
<p align="center"><a href="cookie_calcul.php">calculer le total</a></p>
</body>
</html>
On met à jour le bon cookie (grâce à la méthode GET) On affiche l'interface.

7.6.5.Exemple de script PHP utilisant des cookies (suite et fin)

Ce troisième script (cookie_calcul.php) calcule et affiche le prix total du panier.
<?php
    $panier = $_COOKIE["panier"];

	$total  = 0;
	$total += $panier["pomme"]*1;
	$total += $panier["poire"]*1.5;
	$total += $panier["peche"]*2;
	$total += $panier["banane"]*1;
?>
<html>
<head>
<title>Le total du panier</title>
</head>
<body bgcolor="#FFFFFF">
<p align="center">Le total de votre panier: <?echo $total?> E.</p>
<p align="center"><a href="cookie_ajout.php">Modifier mon panier</a></p>
<p align="center"><a href="cookie_init.php">Vider mon panier</a></p>
</body>
</html>