Cookies en PHP
Ya vimos que son y cómo funcionan las cookies de forma teórica. Ahora vamos a ver la forma de utilizarlas, programarlas, leerlas… en php
Estructura de las cookies en PHP
Las cookies se almacenan a partir de lo que llamamos un par nombre valor, como por ejemplo usuario = mateo.
En ellas también se establecen algunos datos importantes con información adicional como por ejemplo;
- La fecha de expiración
- Dominio donde usarse
En la siguiente imagen vemos la estructura general de una cookie:
- Es la parte de la cookie que va a definir el nombre y el valor que almacena
- Nos indica la fecha de borrado
- El path nos permite establecer los directorios donde se va a utilizar la cookie. La / hace referencia a todo el sitio. Por defecto se activa en la carpeta de declaración de la cookie y afecta a todas sus subcarpetas.
- Se especifica el dominio y subdominios donde se van a utilizar las cookies. Por defecto se utiliza en el que se declara la cookie.
Crear cookies en PHP
Para crear cookies en PHP es necesaria la función setcookie(). Esta función utiliza los argumentos tal y como hemos visto en la estructura de la cookie, es decir el par nombre valor y los parámetros opcionales.
A continuación vemos un ejemplo:
$nombre='Miguel'; setcookie('nombre', $nombre, time()+3600);
En el ejemplo declaramos la variable para el valor, esta variable puede venir desde un formulario, una base de datos… no importa, incluso podríamos declarar la cadena en el argumento directamente.
El segundo argumento define el tiempo de vida de la cookie, que son 3600 segundos (1 hora), transcurrido ese tiempo la cookie desaparecerá del sistema.
Leer cookies en PHP
Las cookies se guardan en un array global asociativo llamado $_COOKIE, de modo que podemos leer las cookies atacando a este array por el nombre de la cookie que queremos utilizar, e incluso comprobar si la cookie existe y actuar en consecuencia como vemos a continuación:
if (isset($_COOKIE['nombre'])){ echo 'el valor de la cookie es: '. $_COOKIE['nombre']; }else{ echo 'No hay cookies'; }
En este ejemplo comprobamos que exista la cookie llamada nombre y si existe mostramos el valor por medio el índice del array asociativo.
En caso de que no lo exista mostramos la cadena «No hay cookies».
Borrar cookies en PHP
Las cookies se eliminan automáticamente una vez que pasa el tiempo de expiración (en nuestro ejemplo 3600 segundos si no se refrescan), pero también podemos borrarlas utilizando acciones que realice el usuario o por que nos resulte interesante.
Para ello tan solo hay que volver a utilizar la función setcookie() y en tiempo de expiración poner un valor negativo, a mi me gusta poner -1000 pero cualquier valor negativo debería valer.
setcookie('nombre', $_COOKIE['nombre'], time()-1000);
Nota: Se debe de poner siempre el código de crear y de destruir cookies al principio del archivo, de este modo evitaremos errores en el envío de las cabeceras.
Definiendo cookies como arrays
Las cookies también pueden contener varios valores contenidos en un array como el del siguiente ejemplo:
$persona = array("Miguel", "López", "36", "Córdoba", "1234");
Para guardar arrays en las cookies debemos de hacerlo guardando el nombre y el índice de dicho array, donde el índice no va entre comillas:
setcookie("persona[nombre]", $persona[0], time()+3600); setcookie("persona[apellido]", $persona[1], time()+3600); setcookie("persona[edad]", $persona[2], time()+3600); setcookie("persona[ciudad]", $persona[3], time()+3600); setcookie("persona[clave]", $persona[4], time()+3600);
Para leer las cookies se considera como si fuera un array bidimensional y las leemos tal y como vemos a continuación:
echo "El nombre es: ".$_COOKIE['persona']['nombre']; echo "El apellido es: ".$_COOKIE['persona']['apellido']; echo "La edad es: ".$_COOKIE['persona']['edad']; echo "La ciudad es: ".$_COOKIE['persona']['ciudad']; echo "La clave es: ".$_COOKIE['persona']['clave'];
Con todo esto que hemos visto tenemos la capacidad de comenzar a trabajar con las cookies, aunque no hayamos visto ejemplos específicos que os contaré en otra entrada para que podáis controlar visitas, tiempos, redeclarar la cookie…
Gracias