Les cookies permettent de sauvegarder des informations chez le client relative à sa visite sur un site.
Lors de la prochaine visite, PHP est capable de lire ces informations afin d'authentifier l'utilisateur et de reconstituer un environnement adapté.
La fonction setcookie permet d'envoyer un cookie sur l'ordinateur client.
setcookie(nom_cookie [, valeur [, date_expiration [, chemin [, domaine [, sécurisation]]]]]); setcookie("Session_site", SID, time()+3600*24, "/", ".site.com", 0); /* envoi d'un cookie non sécurisé contenant l'identifiant de session du site 'site.com' avec une durée de vie de 24 heures */
La date d'expiration indique la durée de vie du cookie chez le client. En général, la fonction time est utilisée avec une expression numérique précisant un intervalle de temps.
time()+3600*12 // Le cookie sera valable entre : 10:12:00 - 22:12:00
Une date précise peut être également entrée en utilisant la fonction mktime.
mktime(0,0,0,31,12,2002) // Le cookie sera valable jusqu'au 31 décembre 2002
Le chemin indique le répertoire du site où le cookie possède une validité. La valeur par défaut est la racine du site web.
Le domaine indique le nom DNS du site sur lequel le cookie possède une validité. Par défaut, le nom du domaine est celui à partir duquel le cookie a été envoyé. La valeur de cet argument doit comporter deux points '.', un au début et l'autre avant le suffixe.
L'argument sécurisation est un nombre entier indiquant si le cookie est sécurisé (1) ou s'il ne l'est pas (0 - par défaut).
Les cookies faisant partie des en-têtes HTTP, la fonction setcookie doit être appelée avant l'affichage d'un document, c'est pourquoi, il faut placer l'instruction avant le balisage HTML.
<?php setcookie("Nom", "Valeur"); ?> <html> ... </html>
Les cookies envoyés au client sont automatiquement retournés à l'application PHP afin d'être convertis en une variable à l'instar des champs de saisie des fomulaires.
<?php echo $Session_site; echo $_COOKIE["Session_site"]; echo $HTTP_COOKIE_VARS["Session_site"]; ?>
Il existe deux possiblités pour récupérer les valeurs d'un cookie, soit par la variable globale correspondante, soit par le tableau associatif global $_COOKIE ou $HTTP_COOKIE_VARS.
Il est possible de passer plusieurs valeurs à un cookie par l'intermédiaire de crochets '[]' suivant le nom du cookie.
<?php setcookie( "site['sid']", SID ); setcookie( "site['couleur']", $couleur ); setcookie( "site['police']", $police ); if (isset($site)) { while(list($nom, $valeur) = each($site)) { echo $nom . " = " . $valeur . "<br>"; } } ?>
La suppression d'un cookie peut s'effectuer par l'intermédiaire de la réémission d'un cookie de même nom mais avec une valeur vide. Toutefois, toutes les informations contenues par le cookie sont supprimées contrairement au cookie lui même. Celui-ci existe toujours, mais il est devenu inutilisable.
Exemple [voir]setcookie("nom_cookie");
<html> <!-- Fichier : formulaire.html --> <body> <? if(!isset($name)) $name = 'laltruiste'; $e = ""; $pw = ""; $cnt = 0; if (isset($_COOKIE[$name]) && is_array($_COOKIE[$name])){ print_r($_COOKIE." ".count($_COOKIE[$name])); echo "<h3>Le cookie contient les informations suivantes :</h3>"; echo "<h4>Extraction par la variable globale</h4>"; while(list($nom, $valeur) = each(${$name})) { echo "<u>" . $nom . " :</u> " . $valeur . "<br>"; } echo "<h4>Extraction par le tableau associatif global</h4>"; $i = 0; while(list($nom, $valeur) = each($_COOKIE[$name])) { echo "<u>" . $nom . " :</u> " . $valeur . "<br>"; switch($i++) { case 0: $e = $valeur; break; case 1: $pw = $valeur; break; case 2: $cnt = $valeur; break; } } } ?> <form method="post" action="fichier.php" name="form"> <table border="0"> <tr> <td>eMail</td> <td>: <input type="text" name="email" size="20"></td> </tr> <tr> <td>Mot de passe</td> <td>: <input type="password" name="password" size="20"></td> </tr> <tr> <td>Nom du cookie</td> <?if($cnt == 0){?> <td>: <input type="text" name="cookie" value="<?echo $name?>"></td> <?}else{?> <td>: <?echo $name?> <input type="hidden" name="cookie" value="<?echo $name?>"></td> <?}?> </tr> <tr> <td><input type="submit" name="soumettre" value="Envoyer"></td> <td><input type="submit" name="detruire" value="Détruire" onclick="document.form.action='detruire.php'; true"></td> </tr> </table> <input type="hidden" name="counter" value="<?echo $cnt?>"> </form> </body> </html> <?php // Fichier : traitement.php setcookie($cookie."['email']", $email); setcookie($cookie."['password']", $password); setcookie($cookie."['count']", $counter + 1); ?> <html> <body> <a href="cookie.php?name=<?echo $cookie?>">Retourner à la page précédente</a> </body> </html> <?php // Fichier : detruire.php if (sizeof($_COOKIE) > 0) { while(list($nom, $valeur) = each($_COOKIE)) { setcookie($nom); } } ?> <html> <body> <h4>Le cookie est détruit...</h4> <a href="cookie.php">Retourner à la page précédente</a> </body> </html> |