Ver índice
Las cookies

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Las cookies

De igual modo que ocurría con la función mail, no todos los hosting tienen habilitada la opción de envío de cookies. Como sabes, las cookies son pequeños ficheros que se escriben en el ordenador del cliente.

Si utilizas Internet Explorer podrás ver que se almacenan como ficheros de texto en un directorio llamado Archivos temporales de Internet y que su nombre es de este tipo: cookie:xxx@nombre[z].txt donde xxx suele ser el nombre que figura en el registro de Windows como nombre del equipo (el que se pone al instalar Windows); nombre suele ser el nombre del directorio de servidor desde el que se envió la cookie y el número z suele ser el ordinal del números de accesos a la página que envía la cookie.

Firefox trata las cookies de forma distinta. Las almacena en un único fichero llamado cookies.sqlite que suele encontrarse en: C:\Documents and Settings\Usuario\Datos de programa\Mozilla\Firefox\Profiles\xxxx.default. En cuanto a Google Chrome también utiliza un único fichero llamado cookies que suele estar en un directorio como este: C:\Documents and Settings\Usuario\Configuración local\Datos de programa\Google\Chrome\User Data\Default

En el caso de usar Ubuntu como sistema operativo el fichero cookies.sqlite de Firefox puedes encontrarlo en un directorio cuya ruta será similar a esta: /home/(nombre_de_usuario)/.mozilla/firefox/xxxx.default

Enviar y leer cookies

La instrucción para el envío de cookies debe insertarse al principio de la página y antes de cualquier etiqueta HTML o línea en blanco. Esto es muy importante, no lo olvides. La sintaxis es la siguiente:

setcookie(nombre, valor, expira)

donde nombre es una cadena que contiene el nombre de la variable que recoge el valor de la cookie, valor es el valor, numérico o cadena, que se asignará a la variable anterior y expira indica la fecha de caducidad de la cookie que suele expresarse usando el valor devuelto por la función time() (hora actual) más un número que representa los segundos que han de transcurrir desde «ahora» hasta que la cookie expire.

Los valores contenidos en las cookies pueden ser leídos por el servidor a partir de variables predefinidas $_COOKIE que, como todas las de este tipo, es un array asociativo. El índice de este array será el nombre asignado a la cookie. Veamos este ejemplo:

<?php
/* setcookie escribe el contenido de la cookie en el ordenador del cliente */
setcookie("cookie1","Soy la cookie1",time()+3600);
# escribe el valor leido en la cookie
@print "Esta es la <i>galletita</i>: ".$_COOKIE['cookie1'];
?>

ejemplo266.php

Al ejecutar por primera vez este script (o al hacerlo después de limpiar o eliminar historial de navegación en el cliente) solo leeremos el texto «Esta es la galletita :» sin nada detrás. La explicación es la siguiente: las instrucciones PHP se ejecutan en el servidor antes de enviar la página al cliente. Eso significa que, al ejecutar por primera vez, se inserta la orden de escritura y se comprueba el valor de la variable, que aun no ha sido creada y por ello aparece en blanco. Será en la actualización –ya se habría producido un envío al navegador y ya se habría escrito la cookie– cuando si se leerá el valor anterior

Dado el carácter superglobal de $_COOKIE también se le puede aplicar la función extract tal como hemos comentado en al tratar el tema de los formularios. En este ejemplo podemos ver esa opción

<?php
extract($_COOKIE);
@print "Esta es la galletita leida desde extract: ".$cookie1;
?>

ejemplo267.php

Como es lógico los valores de las cookies pueden asignarse también por medio de variables tal como puedes comprobar en estos ejemplos:

<?php
$variable="Ahora me han incluido desde una variable";
setcookie("cookie2",$variable,time()+3600);
@print "Esta es la nueva cookie: ".$_COOKIE['cookie2'];
?>

ejemplo268.php

<?php
print "Estoy leyendo la cookie2: ".$_COOKIE['cookie2'];
extract($_COOKIE);
print "<br>Sigo leyendo lo mismo a través del resultado de extract: ".$cookie2;
?>

ejemplo269.php

Una cookie definida como array

Una cookie puede contener varios valores agrupados en un array. Para ello basta con incluir en setcookie el nombre y el índice de un array utilizando un setcookie por cada uno de los elementos del array tal como puedes ver en el ejemplo. Para leer las cookies enviadas de esta forma bastará con leer el array devuelto.

  ¡Cuidado!  

Fíjate en la sintaxis de setcookie del ejemplo. Los nombres de los índices del array no se escriben entre comillas.
Observa también que al leer los datos de la cookie hemos de tratarla como un array bidimensional. El primer índice el nombre de la cookie (en nombre del array que contiene la información) y el segundo será el nombre concreto de cada uno de los índices tal como han sido creados.

<?php
$valores=Array("Verde","Verano","Rolls-Royce","Millonario");
# a diferencia de lo que ocurre al definir elementos de array asociativos
# en este caso los indices asociativos (color, estación, etc.) no van
# entre comillas
setcookie("cookie3[color]",$valores[0],time()+3600);
setcookie("cookie3[estacion]",$valores[1],time()+3600);
setcookie("cookie3[coche]",$valores[2],time()+3600);
setcookie("cookie3[finanzas]",$valores[3],time()+3600);
# la variable superglobal $_COOKIE['cookie3'] contiene un array, por ello
# la lectura de sus valores debe hacers considerando que se trata de un
# array bidimensional
@print "<br>El color viene en  $_COOKIE['cookie3']['color'] y es: ".$_COOKIE['cookie3']['color'];
@print "<br>La estación $_COOKIE['cookie3']['estacion'] y es: ".$_COOKIE['cookie3']['estacion'];
@print "<br>La finanzas $_COOKIE['cookie3']['finanzas'] están: ".$_COOKIE['cookie3']['finanzas'];
@print "<br>El coche es $_COOKIE['cookie3']['coche'] y es: ".$_COOKIE['cookie3']['coche'];
print "<br> también podemos leer la cookie mediante un bucle como este:<br>";
if (isset($_COOKIE['cookie3']) ) {
   while( list( $indice, $valor) = each($_COOKIE['cookie3']) ) {
	  echo "$indice == $valor\n";
   }
}
?>

ejemplo270.php

Un contador de visitas como aplicación práctica

<?php
@$numero=$_COOKIE['visitante'];
$numero+=1;
setcookie("visitante",$numero,time()+86400);

if($numero==1){print "Es la $numero ª vez que visitas esta página";}
if($numero>1){print "Es la $numero ª vez  que visitas esta página";}
?> 

ejemplo271.php

Cambio del color de fondo

<?php
@$numero=$_COOKIE['color'];
$numero+=1;
setcookie("color",$numero,time()+86400);
extract($_COOKIE);
$colores=array('red','blue','yellow','green','black');
/* el fondo de la página tendrá uno de estos cinco colores de
fondo dependiendo del resto de la division entre 5 del número de visitas
efectuadas hasta el momento */
@print "<body bgcolor='".$colores[$color%5]."'></body>";
?> 

ejemplo272.php