PHP - Cookies

Las cookies son archivos de texto almacenados en la computadora del cliente y se mantienen con el propósito de rastrear el uso. PHP admite de forma transparente las cookies HTTP.

Hay tres pasos involucrados en la identificación de usuarios recurrentes:

  • La secuencia de comandos del servidor envía un conjunto de cookies al navegador. Por ejemplo, nombre, edad o número de identificación, etc.

  • El navegador almacena esta información en la máquina local para uso futuro.

  • La próxima vez que el navegador envíe una solicitud al servidor web, enviará la información de las cookies al servidor y el servidor utilizará esa información para identificar al usuario.

Este capítulo le enseñará cómo configurar cookies, cómo acceder a ellas y cómo eliminarlas.

La anatomía de una galleta

Las cookies generalmente se establecen en un encabezado HTTP (aunque JavaScript también puede configurar una cookie directamente en un navegador). Un script PHP que establece una cookie puede enviar encabezados que se parecen a esto:

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

Como puede ver, el encabezado Set-Cookie contiene un par de nombre-valor, una fecha GMT, una ruta y un dominio. El nombre y el valor estarán codificados en URL. El campo expira es una instrucción para el navegador de "olvidar" la cookie después de la fecha y hora indicadas.

Si el navegador está configurado para almacenar cookies, conservará esta información hasta la fecha de caducidad. Si el usuario apunta con el navegador a cualquier página que coincida con la ruta y el dominio de la cookie, reenviará la cookie al servidor. Los encabezados del navegador pueden tener este aspecto:

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 tendrá acceso a la cookie en las variables ambientales $ _COOKIE o $ HTTP_COOKIE_VARS [] que contiene todos los nombres y valores de las cookies. Se puede acceder a la cookie anterior usando $ HTTP_COOKIE_VARS ["nombre"].

Configuración de cookies con PHP

PHP proporcionado setcookie()función para configurar una cookie. Esta función requiere hasta seis argumentos y debe invocarse antes de la etiqueta <html>. Para cada cookie, esta función debe llamarse por separado.

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

Aquí está el detalle de todos los argumentos:

  • Name- Esto establece el nombre de la cookie y se almacena en una variable de entorno llamada HTTP_COOKIE_VARS. Esta variable se utiliza al acceder a las cookies.

  • Value - Esto establece el valor de la variable nombrada y es el contenido que realmente desea almacenar.

  • Expiry- Esto especifica un tiempo futuro en segundos desde las 00:00:00 GMT del 1 de enero de 1970. Después de este tiempo, la cookie se volverá inaccesible. Si este parámetro no está configurado, la cookie caducará automáticamente cuando se cierre el navegador web.

  • Path- Especifica los directorios para los que es válida la cookie. Un solo carácter de barra inclinada permite que la cookie sea válida para todos los directorios.

  • Domain- Esto se puede utilizar para especificar el nombre de dominio en dominios muy grandes y debe contener al menos dos puntos para ser válido. Todas las cookies solo son válidas para el host y el dominio que las creó.

  • Security - Esto se puede establecer en 1 para especificar que la cookie solo debe enviarse mediante transmisión segura utilizando HTTPS; de lo contrario, se establece en 0, lo que significa que la cookie puede enviarse mediante HTTP normal.

El siguiente ejemplo creará dos cookies name y age estas cookies caducarán después de una hora.

<?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>

Acceso a cookies con PHP

PHP proporciona muchas formas de acceder a las cookies. La forma más sencilla es utilizar las variables $ _COOKIE o $ HTTP_COOKIE_VARS. El siguiente ejemplo accederá a todas las cookies configuradas en el ejemplo anterior.

<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>

Puedes usar isset() función para comprobar si una cookie está configurada o no.

<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>

Eliminación de cookies con PHP

Oficialmente, para eliminar una cookie, debe llamar a setcookie () solo con el argumento de nombre, pero esto no siempre funciona bien, sin embargo, y no se debe confiar en él.

Es más seguro configurar la cookie con una fecha que ya ha expirado:

<?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>