Programación Web » Aprender PHP y MySQL » Unidad 6. Cookies en PHP:

Borrar una variable o una cookie

No es lo mismo eliminar un archivo de cookie completamente del disco del usuario, que simplemente vaciar el valor de algunas de sus variables.

La forma de vaciar el valor de una variable de una cookie es muy simple, y consiste en definirla tal como si la estuviéramos creando, pero sin especificarle ningún valor:

<?php
setcookie ("nombre");
?>

De todos los parámetros posibles que podemos proporcionar dentro de los paréntesis al crear una cookie,  el único obligatorio es el nombre de la variable y, en el caso de ser el único que proporcionaremos, produce el vaciamiento de los datos que hubiéramos almacenados con anterioridad en esa variable.

Con la misma lógica  que en el caso de crear una cookie, si luego de ordenar borrar una cookie, en el mismo código de la misma página que se está ejecutando en el servidor intentamos leer esa cookie, esta todavía existirá , ya que recién en la siguiente petición  al servidor dejara de estar disponible su dato.

Complementariamente, si queremos eliminar del servidor inmediatamente una variable de cookie ya leída, será necesario utilizar la función unset:

<?php
unset ($_COOKIE ["nombre"];
?>

Esto no solo vacia el valor de la variable, sino que elimina la variable misma.

En cambio, para eliminar por completo el archivo de la cookie del disco del usuario, será necesario utilizar un argumento extra de la función setcookie, que aprendemos a continuación.

Argumentos opcionales

Ya hemos utilizado en los distinto ejemplos varios de los argumentos o parámetros que podemos utilizar dentro de los paréntesis de la función setcookie.

La totalidad de estos argumentos es la siguente:

Set cookie (nombre, valor, duración, ruta, dominio, seguridad)

El único parámetro obligatorio es el nombre de la cookie o variable (que de ser usado sin ningún otro dato, causa la eliminación de esa variable de la cookie, tal como lo hemos aprendido recién).

Si al utilizar esta función deseamos saltear (omitir) alguno de los argumento para luego especificar otro, igualmente debemos completar su posición con ""( nada, ni siquiera un espacio, entre comillas), salvo en el caso de la duración o vencimiento, que debe completarse con un 0, y salvo también el ultimo e los argumentos, el de limitar la cookie que se transmitirá solo bajo una conexión https ( segura), en el cual los valores posibles de ese argumento son 1 (se obliga a transmitirla por https) o 0 (no es necesario https).

Veamos, entonces, los argumentos posibles que aún no hemos visto, como la ruta y el dominio.

Esto no solo vacia el valor de la variable, sino que elimina la variable misma.

En cambio, para eliminar por completo el archivo de la cookie del disco del usuario, será necesario utilizar un argumento extra de la función setcookie, que aprendemos a continuación.

Argumentos opcionales

Ya hemos utilizado en los distinto ejemplos varios de los argumentos o parámetros que podemos utilizar dentro de los paréntesis de la función setcookie.

La totalidad de estos argumentos es la siguente:

Set cookie (nombre, valor, duración, ruta, dominio, seguridad)

El único parámetro obligatorio es el nombre de la cookie o variable (que de ser usado sin ningún otro dato, causa la eliminación de esa variable de la cookie, tal como lo hemos aprendido recién).

Si al utilizar esta función deseamos saltear (omitir) alguno de los argumento para luego especificar otro, igualmente debemos completar su posición con ""( nada, ni siquiera un espacio, entre comillas), salvo en el caso de la duración o vencimiento, que debe completarse con un 0, y salvo también el ultimo e los argumentos, el de limitar la cookie que se transmitirá solo bajo una conexión https ( segura), en el cual los valores posibles de ese argumento son 1 (se obliga a transmitirla por https) o 0 (no es necesario https).

Veamos, entonces, los argumentos posibles que aún no hemos visto, como la ruta y el dominio.

El cuarto argumento de la función que crea una cookie, la ruta, indica desde que directorio (carpeta) desde un servidor se accederá a los datos de esa cookie, impidiendo la lectura de sus datos a toda página PHP que no esté almacenada dentro de esa carpeta.

Un ejemplo:

<?php
setcookie ("prueba",$ valor,time ()+3600, "foro/ "," ",1);
?>

Estamos definiendo una serie de cosas:

  • Creamos una variable llamada "prueba"
  • Su contenido es lo que sea que estuviera almacenado en la variable "$valor",
  • Este dato dejará de existir una hora después de su creación ( 60 minutos * 60 segundos = 3600 segundos).
  • Esta variable " prueba" sólo se podrá leer desde páginas PHP que estén almacenadas dentro de la carpeta " foro" de nuestro sitio.
  • No especificamos ningún subdominio , dejando las comillas vacías.
  • y obligamos a utilizar un servidor seguro (https) para transmitir la variable ( por lo tanto, la cookie no se creará si no disponemos de un servidor https)

El quinto argumento, el del dominio, especifica desde qué dominio se accederá a la cookie (esto es usado para subminios de una mismo sitio, para que únicamente desde ese subdominio se pueden leer los datos de las cookies).
Otro ejemplo:

<?php
setcookie (" ingreso", $datos, time () + (60 * 60 *24) , " "," ar.un dominio.com",0);
?>

En este caso, la cookie tendrá una duración de 24 horas, y solamente se podrá leer desde cualquier carpeta de subdominio ar dentro del dominio undominio.com que se especificó, sin que sea necesaria una conexión segura para enviar los datos.

Y, por último, si queremos eliminar una cookie por completo, vaciando el valor de su variable y eliminando físicamente el archivo del disco del usuario, la forma de hacerlo es indicando un momento de vencimiento anterior al actual ( en el siguiente ejemplo, el " cero" del tercer argumento):

<?php servidor
Setcookie ("nombre", $datos,0);
?>

Tengamos presentes , entonces, que existen tres herramientas distintas para "eliminar datos relacionados con las cookies, pero que no son iguales:

  1. vaciar una variable de cookie sin eliminarla,con setcookie sin valor.
  2. eliminar del una variable ya leida con unset.
  3. eliminar el archivo físico del disco del usuario con setcookie y fecha anterior.

Veamos ahora un ejemplo algo más complejo, pero completo y listo para usar, de uso de cookies para generar código HTML personalizado.

En este caso, el objetivo será generar apenas una palabra que se escribirá con un echo de PHP dentro de la etiqueta <link> de las páginas de nuestro sitio:

<link rel ="stylesheet" type ="text/ css " href ="xxxx.css" />

Por lo cual, según el valor de esa palabra, será una hoja de estilos distinta la que el navegador aplicará para ese usuario durante su navegación a través de ese sitio ( que permitirá ofrecer algunas opciones de diseño personalizado a cada usuario como, por ejemplo, que elija tamaños de fuentes distintos, cantidad de columnas a elección , colores e imágenes de fondos personalizados, etc. Todo esto, simplemente eligiendo cuál hoja de estilos se aplicará, que se decidirá por el valor almacenado en una cookie).

La secuencia de pasos será esta:

  1. Verificaremos si el usuario acaba de elegir algún estilo mediante un menú de selección
  2. (verificamos si en $_POST existe la variable que da nombre al select que ayamos proporcionado para elegir estilos);
  3. si lo hizo, almacenáremos en una cookie el nombre del estilo elegido, y además lo escribiremos dentro de <link>;
  4. de lo contrario, si en $_POST no proporcionó nada, verificamos con otro condicional si ya tiene la cookie almacenada de antes, leyéndola de $_COOKIE y, en ese caso, leeremos la variable que fue proporcionada por esa cookie y escribiremos su valor dentro de la etiqueta <link>;
  5. y, por ultimo, si tampoco en $_COOKIE encontramos datos, es que el usuario llega ala página por primera vez y todavía no eligió nada, así, que en ese caso, escribiremos un valor por defecto dentro del <link>.

¡Manos a la obra! Crearemos un archivo llamado pagina.php:

<?php
If ( isset ( $_POST ["elección"]) ) {
// si el dato esta ubicado allí, es que acaban de usar el formulario y enviaron un estilo elegido.
$hoja = $_POST["elección"];
// entonces, dejamos preparada una variable para usarla dentro de <link>
setcookie ("elegido",$hoja,time () + (60 * 60 * 24 *30) ) ;
// y guardamos una variable a la que llamamos "elegido" dentro de una cookie; su valor lo tomamos de $_POST ["elección" ( o de $hoja que es lo mismo), y definimos su vencimiento para dentro de tres días.
} else {
// si no encontramos en $_POST el dato, vemos si ya estaba en una cookie desde una visita anterior:
If ( isset ( $_COOKIE [" elegido "] ) ) {
// si está, colocamos dentro de la misma variable $hoja lo que el usuario había elegido:
$hoja = $_COOKIE [ " elegido "];
} else {
// si tampoco estaba allí, mostraremos una hoja por defecto:
$hoja = "hoja-por-defecto";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C// DTD XHTML 1.0 Strict // EN"
"http: //www.org / TR/xhtm11/ DTD/ xhtm11 – strict.dtd">
<html xmlns = "http: // www.w3.org/1999/xhtml">
<head><title> usando cookies para elegir una hoja de estilos </title>
<meta http-equiv="content-Type" content = "text/html; charset = utf-8" />
<?php
// se cual sea el camino tomado anteriormente, la variable $hoja debe tener algún valor, así que lo leemos y lo usamos para que se cargue la hoja respectiva:
if ( isset ($hoja) ) {
echo '<link rel = "stylesheet" type = "text / css" href= " '.$hoja. ' . css" />
}
?>
</head>
<body>
<h1>!Elijamos un diseño !<h1/>
<form action= "página.php " method = "post " >
<fieldset>
<p> Cambiemos el estilo a nuestro gusto : </p>
<select name = "elección ">
<option value ="minimalista"> Minimalista</option>
<option value ="antigua"> Antigua</option>
<option value ="moderna">Moderna</option>
<option value ="zoom"> Fuentes grandes</option>
<option value ="tres">Tres columnas</option>
<option value ="dos">Dos columnas</option>
</select>
<input type="submit" value="Elegir" />
</fieldset>
</form>
</body>
</html>

Para que el rompecabezas funcione, los nombres que le daremos a nuestras hojas de estilo serán lo que hemos sado dentro de este código: "hoja por-defecto.css", "minimalista.css", "antigua.css", "moderna.css", "zoom.css", "tres.css" y "dos.css".

Por supuesto, hagamos que los cambios en cuanto a diseño en las distintas hojas CSS sean notorios, para que al navegar por las distintas páginas de nuestro sitio veamos cómo se mantiene el estilo elegido al comenzar la navegación.

Agreguemos en cada página de nuestro sitio los contenidos propios de cada página, e incluyamos un menú para navegar entre ellas,y aseguramos de repetir tanto el menú de selección para elegir un estilo, como el código PHP necesario para que lo detecte y lo guarde en las cookies o lo lea en ellas , completando la etiqueta <link>.

Ideas para aplicar cookies

Para terminar con el tema de las cookies, sugeriremos algunas ideas para otros usos distintos a los que ya vimos.

Por ejemplo, podríamos memorizar si un usuario ya visitó un producto o una categoría de productos de un catálogo. Si gracias a una cookie detectamos que ya visitó el producto "Mesa de ping pong", entonces podríamos mostrarle una publicidad de Paletas de ping pong", o de "clases de ping pong a domicilio". Contenido a medida…

Otro uso interesante seía detectar cuáles de nuestros vistantes ya ingresaron anteriomente a una página de un formulario de inscripción o de contacto, pero sin usarlo (el haberlo hubiese cargado en una cookie un valor especial al llegar a la página de recepción del formulario), y mostrarles un contenido especial que los "anime" a completar la consulta o la inscripción que no se decidieron a concretar en su anterior visita.

Del mismo modo, en un sitio que venda algún producto (ecommerce) mediante un carrito de compras, podríamos detectar si alguien esta usando la cookie ( es decir, si ya eligió productos, o sea, se interesa por algunos de ellos), pero no finalizo la compra, y mostrarle un texto especifico ( igual que en el caso anterior, en la página de finalización de compra deberíamos modificar o borrar la cookie anterior del carrito, para que ya no se le muestre ese texto).

Y, complementariamente, si alguien "sí" compró un producto o servicio, al momento de la compra, podríamos almacenarle una cookie para que en cierta cantidad de días más tarde ( que dependerá de la duración del producto vendido), al entrar a nuestro sitio, le recordemos que se está por acabar su producto y que es momento de que lo compre nuevamente.

En sitios que publican contenidos con cierta frecuencia (diaria, semanal, mensual) podríamos guardar la fecha de la última visita del usuario a nuestro sitio y, calculando la diferencia entre la fecha actual y la última visita, mostrarle un cartel de "¡contenido nuevo!" en los enlaces que apunten hacia contenidos publicados luego de su última visita ( muy pronto aprenderemos a manejar funciones para cálculos con fecha que nos permitirán hacer este tipo de cosas)

Realmente son muchísimas las aplicaciones que se nos pueden ocurrir mediante el uso de cookies. Pero, siempre dentro del tema de identificación del usuario, es posible ir un nivel más allá, y comenzar a trabajar con sesiones, que es el tema que veremos a continuación.

Artículos de navegación

Acerca del Profesor

Adrián Delgado Rodríguez

Ingeniero en Computación, docente por convicción y apasionado por la programación Web.

Actualmente trabaja como Profesor para en el Centro Universitario de la Costa de la Universidad de Guadalajara y como Desarrollador Web.

Síguenos:

 

Ver el perfil completo de Hugo Adrián Delgado Rodríguez (akus.net).

Deja un comentario





Diseño de páginas Web en Puerto Vallarta y Bahía de Banderas akus.net
subir

Síguenos en Facebook

Artículo de la semana

Cómo iniciar una página WebMetodología para la creación de sitios

Comprende las fases de Análisis, Planificación, Contenido, Diseño. ¿Qué método utilizas?