Services webmasters
Partenaires
Jeux concours gratuits
 
headers_sent
<<<
setcookie Index des fonctions
>>>

7.36 HTTP
7 Index des fonctions
 Manuel PHP

Introduction
Pré-requis
Installation
Configuration à l'exécution
Types de ressources
Constantes prédefinies
header
headers_sent
->setcookie

7.36.9 setcookie()Envoie un cookie

[ Exemples avec setcookie ]   PHP 3, PHP 4

bool  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 en-têtes. Les cookies doivent passer avant toute autre en-tête (c'est une restriction des cookies, pas de PHP). Cela vous impose d'appeler cette fonction avant toute balise <HTML> ou <HEAD> .

Note

En PHP 4, vous pouvez utiliser la bufferisation de sortie pour pouvoir envoyer du contenu avant d'appeler cette fonction, avec la contrepartie que toute votre page sera envoyé en une fois. Vous pouvez faire cela en appelant ob_start et ob_end_flush dans votre script, ou en activant la directive output_buffering dans votre fichier de configuration php.ini .

Tous les arguments sauf name (nom) sont optionnels. Si seul le nom est présent, le cookie portant ce nom sera supprimé du navigateur de l'internaute. 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.

Une fois que le cookie a été placé, il est accessible dans les variables globales $_COOKIE ou bien $HTTP_COOKIE_VARS arrays. Notez que les autoglobales telles que $_COOKIE sont disponibles en PHP depuis la version 4.1.0 . $HTTP_COOKIE_VARS existe depuis PHP 3. Les valeurs de cookies existent aussi dans la variable $_REQUEST .

Erreurs communes :

  • Les cookies ne seront accessibles qu'au chargement de la prochaine page, ou au rechargement de la page courante.
  • Les cookies doivent être effacés avec les mêmes paramètres que ceux utilisés lors de leur création.

En PHP 3, les appels multiples à setcookie dans le même script seront effectués dans l'ordre inverse. Si vous essayez d'effacer un cookie avant d'insérer une nouvelle valeur, vous devez placer l'insertion avant l'effacement. En PHP 4, les appels multiples à setcookie sont effectués dan un ordre naturel.

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 :
Exemples avec setcookie

<?php
  setcookie
("TestCookie","Valeur de test");
  
setcookie("TestCookie",$value,time()+3600);  /* expire 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 :
Affectation des valeurs de cookie

<?php
// Afficher un cookie
echo $_COOKIE["TestCookie"];
echo
$HTTP_COOKIE_VARS["TestCookie"];

// Une autre méthode pour afficher tous les cookies
print_r($_COOKIE);
?>

Lorsque vous effacez un cookie, vous devriez toujours vous assurer que la date d'expiration du cookie est déjà passée, pour déclencher le mécanisme de votre navigateur. Voici comment procéder :
Exemple d'effacement de cookies avec setcookie

<?php
// utilisation de la date moins une heure
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".exemple.com", 1);
?>

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

<?php
  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";
    }
  }
?>

Note

Pour plus d'informations sur les cookies, voyez les spécifications de cookies de Netscape à http://www.netscape.com/newsref/std/cookie_spec.php et RFC 2965 .

Vous pourrez noter que le paramètre expire prend un timestamp unique, et non pas la date au format Jour, JJ-Mois-AAAA HH:MM:SS GMT , car PHP fait la conversion en interne.

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.

Voir aussi header .

<< setcookie >>
headers_sent HTTP Index des fonctions
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -