El protocolo HTTP es
desconectado. Esto significa que cada vez que solicitamos una página a un
servidor representa una conexión distinta.
Una cookie es una pequeña cantidad de datos almacenada por el navegador
del usuario cuando solicita una página a un servidor. El que envía que se
genere la cookie es el servidor.
Una cookie consta de un nombre, un valor, una fecha de expiración y un
servidor. Una cookie está limitada a 4KB.
Luego que una cookie es creada sólo el sitio que la creó puede leerla.
Luego de creada una cookie, cada vez que el navegador del usuario visita el
sitio, se envía dicha cookie. Otra cosa importante que hay que tener en cuenta
es que el usuario del browser puede configurar el mismo para no permitir la
creación de cookies, lo que significa que el uso de cookies debe hacerse con
moderación y cuando la situación lo requiera. De todos modos, el 95% de los
navegadores están configurados para permitir la creación de cookies.
Para la creación de una cookie desde PHP debemos llamar a la función
setcookie.
Los parámetros de esta función son:
setcookie( <nombre
de la cookie>, <valor de la cookie>, <fecha de expiración>,
<carpeta del servidor>)
Con un problema sencillo entenderemos el uso de esta función. Supongamos
que queremos que los usuarios que entran a nuestro sitio puedan configurar con
qué color de fondo de página quiere que aparezca cada vez que ingresa al sitio.
Al color seleccionado por el visitante lo almacenaremos en una cookie. En caso
que no exista el color, por defecto es blanco.
La primera página mostrará un formulario con tres controles de tipo
radio para la selección del color. También esta página verificará si existe la
cookie creada, en caso afirmativo fijará el fondo de la página con el valor de
la cookie. Tengamos en cuenta que la primera vez que ejecutemos este programa
la página es de color blanco, luego variará según el color seleccionado en el
formulario.
El código de la primera página es:
<html>
<head>
<title>Problema</title>
</head>
<body
<?php if (isset($_COOKIE['color'])) echo
" bgcolor=\"$_COOKIE[color]\""
?>
>
<form action="pagina2.php"
method="post">
Seleccione de que
color desea que sea la página de ahora en más:<br>
<input type="radio"
value="rojo" name="radio">Rojo<br>
<input type="radio"
value="verde" name="radio">Verde<br>
<input type="radio"
value="azul" name="radio">Azul<br>
<input type="submit"
value="Crear cookie">
</form>
</body>
</html>
El formulario no varía en nada respecto a otros vistos. Lo más
importante es el bloque PHP que verifica si ya existe la cookie en el navegador
del cliente. Es importante entender que la primera vez que ejecutemos esta
página la cookie no existe, por lo que el if se verifica falso:
<body
<?php if (isset($_COOKIE['color'])) echo
" bgcolor=\"$_COOKIE[color]\""
?>
>
El vector asociativo $_COOKIE
almacena todas las cookies creadas por el visitante. Si es la primera vez que
peticionamos esta página, el vector $_COOKIE
no tendrá elementos.
Es decir que la marca body no tiene inicializada la propiedad bgcolor.
La segunda página es la que crea la cookie propiamente dicha:
<?php
if ($_REQUEST['radio']=="rojo")
setcookie("color","#ff0000",time()+60*60*24*365,"/");
elseif
($_REQUEST['radio']=="verde")
setcookie("color","#00ff00",time()+60*60*24*365,"/");
elseif ($_REQUEST['radio']=="azul")
setcookie("color","#0000ff",time()+60*60*24*365,"/");
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
Se creó la cookie.
<br>
<a
href="pagina1.php">Ir a la otra página</a>
</body>
</html>
La llamada a la función setcookie debe hacerse antes de imprimir
cualquier marca HTML, de lo contrario no funcionará.
Como podemos observar, la creación de la cookie se hace llamando a la
función setcookie:
<?php
if ($_REQUEST['radio']=="rojo")
setcookie("color","#ff0000",time()+60*60*24*365,"/");
elseif
($_REQUEST['radio']=="verde")
setcookie("color","#00ff00",time()+60*60*24*365,"/");
elseif
($_REQUEST['radio']=="azul")
setcookie("color","#0000ff",time()+60*60*24*365,"/");
?>
El nombre de la cookie se llama "color" y el valor que
almacenamos depende de qué control de tipo radio esté seleccionado en la página
anterior. La fecha de expiración de la cookie la calculamos fácilmente llamando
a la función time() que nos retorna
la fecha actual en segundos y le sumamos el producto 60*60*24*365 (60 segundos
* 60 minutos * 24 horas * 365 días) es decir que la cookie existirá en la
máquina del visitante hasta el año próximo.
Cuando indicamos como directorio la sintaxis "/" significa que
la cookie se crea a nivel del sitio y con cualquier petición a dicho sitio, el
navegador enviará la cookie al servidor.
Por último dispusimos en esta página un hipervínculo a la página
anterior, para ver que, de ahora en más, cada vez que ejecutemos la
pagina1.php, el color de fondo de la misma dependerá del valor de la cookie
registrada.
Borrar una cookie
Borrar una cookie
Para borrar una cookie se debe llamar a la función setcookie con una fecha anterior a la actual.
Haremos un algoritmo muy común a muchos sitios que administran webmail.
Recordaremos en una cookie el mail ingresado por el operador, el código fuente
de la primera página es la siguiente:
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php"
method="post">
Ingrese su mail:
<input type="text"
name="mailusuario"
value="<?php if
(isset($_COOKIE['mail'])) echo $_COOKIE['mail'];?>"><br>
<input type="radio"
name="opcion" value="recordar">
Recordar en esta
computadora el mail ingresado.<br>
<input type="radio"
name="opcion" value="norecordar">
No recordar.<br>
<input type="submit"
value="confirmar">
</form>
</body>
</html>
Es decir, disponemos un control text y como valor de la misma
verificamos si el cliente tiene ya una cookie guardada en su máquina, en caso
afirmativo la mostramos dentro del text modificando la propiedad value.
Mediante dos controles de tipo radio daremos la posibilidad al cliente
que el navegador recuerde o no el mail ingresado.
Como es sabido, la primera vez que accedamos a la página no existe la
cookie llamada mail.
La segunda página:
<?php
if
($_REQUEST['opcion']=="recordar")
setcookie("mail",$_REQUEST['mailusuario'],time()+(60*60*24*365),"/");
elseif ($_REQUEST['opcion']=="norecordar")
setcookie("mail","",time()-1000,"/");
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if
($_REQUEST['opcion']=="recordar")
echo "cookie creada";
elseif
($_REQUEST['opcion']=="norecordar")
echo "cookie eliminada";
?>
<br>
<a
href="pagina1.php">Ir a la otra página</a>
</body>
</html>
En esta página verificamos cuál control radio está seleccionado, si es
el primero, creamos la cookie mail con una vida de 1 año:
setcookie("mail",$_REQUEST['mailusuario'],time()+(60*60*24*365),"/");
En caso que esté seleccionado el segundo radio, creamos la misma cookie
pero con una fecha de caducidad inferior a la actual (con esto estamos
virtualmente eliminando la cookie):
setcookie("mail","",time()-1000,"/");
0 comentarios:
Publicar un comentario