setcookie

(PHP 3, PHP 4 )

setcookie -- Envoie un cookie

Description

int setcookie (string name, string value, int expire, string path, string domain, int secure)

setcookie() définit un cookie qui sera envoyé avec le reste des entêtes. Les cookies doivent passer avant tout autre entête (c'est une restriction des cookies, pas de PHP). Cela vous impose d'appeler cette fonction avant toute balise <html> ou <head>.

Tous les arguments sauf name (nom) sont optionnels. Si seul le nom est présent, le cookie portant ce nom sera supprimé du client. Vous pouvez aussi utiliser une chaîne vide comme valeur, pour ignorer un argument. Le paramètre expire est un timestamp UNIX, du même genre que celui retourné par time() ou mktime(). Le paramètre secure indique que le cookie doit être uniquement transmis à travers une connexion HTTPS sécurisée.

Erreurs communes:

Les cookies ne seront accessibles qu'au chargement de la prochaîne page.

Les appels multiples à setcookie() dans la même page seront réalisés dans l'ordre inverse. Si vous essayez d'effacer un cookie avant d'insérer une autre valeur, il faut placer l'insertion avant l'effacement.

Quelques exemples :

Exemple 1. Exemples avec setcookie()


<?php
setcookie("TestCookie","Test Value");
setcookie("TestCookie",$value,time()+3600);  /* éxpire dans une heure */
setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);
?>
      

Notez que la partie "valeur" du cookie sera automatiquement encodée URL lorsque vous envoyez le cookie, et lorsque vous le recevez, il sera automatiquement décodé, et affecté à la variable du même nom que le cookie. Pour voir le résultat, essayez les scripts suivants :


<?php
echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];
?>
      

Vous pouvez aussi utiliser les cookies avec des tableaux, en utilisant la notation des tableaux. Cela a pour effet de créer autant de cookie que votre tableau a d'éléments, mais lorsque les cookies seront reçus par PHP, les valeurs seront placées dans un tableau :


setcookie( "cookie[three]", "cookiethree" );
setcookie( "cookie[two]", "cookietwo" );
setcookie( "cookie[one]", "cookieone" );
if ( isset( $cookie ) ) {
   while( list( $name, $value ) = each( $cookie ) ) {
	  echo "$name == $value<br>\n";
   }
}
	  

Pour d'autres informations sur les cookies, jetez un oeil sur http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 utilisé avec le Service Pack 1 ne gère pas bien les cookies qui possèdent un paramètre path.

Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x semblent ne pas gérer correctement les cookies lorsque path et time> ne sont pas fournis.