PHP - Cookies

Les cookies sont des fichiers texte stockés sur l'ordinateur client et ils sont conservés à des fins de suivi d'utilisation. PHP prend en charge de manière transparente les cookies HTTP.

Il y a trois étapes pour identifier les utilisateurs qui reviennent -

  • Le script serveur envoie un ensemble de cookies au navigateur. Par exemple, le nom, l'âge ou le numéro d'identification, etc.

  • Le navigateur stocke ces informations sur la machine locale pour une utilisation future.

  • La prochaine fois que le navigateur envoie une demande au serveur Web, il envoie ces informations sur les cookies au serveur et le serveur utilise ces informations pour identifier l'utilisateur.

Ce chapitre vous apprendra comment configurer les cookies, comment y accéder et comment les supprimer.

L'anatomie d'un cookie

Les cookies sont généralement définis dans un en-tête HTTP (bien que JavaScript puisse également définir un cookie directement sur un navigateur). Un script PHP qui définit un cookie peut envoyer des en-têtes qui ressemblent à ceci -

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html

Comme vous pouvez le voir, l'en-tête Set-Cookie contient une paire de valeur de nom, une date GMT, un chemin et un domaine. Le nom et la valeur seront encodés en URL. Le champ expire est une instruction au navigateur pour "oublier" le cookie après l'heure et la date données.

Si le navigateur est configuré pour stocker des cookies, il conservera alors ces informations jusqu'à la date d'expiration. Si l'utilisateur pointe le navigateur vers une page qui correspond au chemin et au domaine du cookie, il renverra le cookie au serveur.Les en-têtes du navigateur peuvent ressembler à ceci:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Un script PHP aura alors accès au cookie dans les variables d'environnement $ _COOKIE ou $ HTTP_COOKIE_VARS [] qui contient tous les noms et valeurs de cookie. Le cookie ci-dessus est accessible en utilisant $ HTTP_COOKIE_VARS ["nom"].

Configurer les cookies avec PHP

PHP fourni setcookie()fonction pour définir un cookie. Cette fonction nécessite jusqu'à six arguments et doit être appelée avant la balise <html>. Pour chaque cookie, cette fonction doit être appelée séparément.

setcookie(name, value, expire, path, domain, security);

Voici le détail de tous les arguments -

  • Name- Ceci définit le nom du cookie et est stocké dans une variable d'environnement appelée HTTP_COOKIE_VARS. Cette variable est utilisée lors de l'accès aux cookies.

  • Value - Ceci définit la valeur de la variable nommée et correspond au contenu que vous souhaitez réellement stocker.

  • Expiry- Ceci spécifie une heure future en secondes depuis 00:00:00 GMT le 1er janvier 1970. Passé ce délai, le cookie deviendra inaccessible. Si ce paramètre n'est pas défini, le cookie expirera automatiquement lorsque le navigateur Web est fermé.

  • Path- Ceci spécifie les répertoires pour lesquels le cookie est valide. Un seul caractère barre oblique permet au cookie d'être valide pour tous les répertoires.

  • Domain- Cela peut être utilisé pour spécifier le nom de domaine dans de très grands domaines et doit contenir au moins deux points pour être valide. Tous les cookies ne sont valables que pour l'hôte et le domaine qui les ont créés.

  • Security - Cela peut être défini sur 1 pour spécifier que le cookie ne doit être envoyé que par transmission sécurisée en utilisant HTTPS, sinon défini sur 0, ce qui signifie que le cookie peut être envoyé par HTTP normal.

L'exemple suivant créera deux cookies name et age ces cookies expireront au bout d'une heure.

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>Setting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

Accéder aux cookies avec PHP

PHP offre de nombreuses façons d'accéder aux cookies. Le moyen le plus simple consiste à utiliser les variables $ _COOKIE ou $ HTTP_COOKIE_VARS. L'exemple suivant accédera à tous les cookies définis dans l'exemple ci-dessus.

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["age"] . "<br />";
      ?>
      
   </body>
</html>

Vous pouvez utiliser isset() pour vérifier si un cookie est défini ou non.

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         if( isset($_COOKIE["name"]))
            echo "Welcome " . $_COOKIE["name"] . "<br />";
         
         else
            echo "Sorry... Not recognized" . "<br />";
      ?>
      
   </body>
</html>

Supprimer un cookie avec PHP

Officiellement, pour supprimer un cookie, vous devez appeler setcookie () avec l'argument nom uniquement, mais cela ne fonctionne pas toujours bien, cependant, et ne doit pas être invoqué.

Il est plus sûr de définir le cookie avec une date qui a déjà expiré -

<?php
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "age", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>Deleting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Deleted Cookies" ?>
   </body>
   
</html>