Home - ASP - Cookies - 1 - 2 - 3 - 4 - 5 - 6
Cookies (III)
por Luciano Moreno, Web Master de HTMLWeb
Escribiendo Cookies
Para crear una nueva cookie o modificar el contenido de una de ellas se usa en ASP la colección Cookies del objeto Response. La sintaxis para ello es la siguiente:
Response.Cookies("nombre_cookie") = valor_cookie
Donde valor_cookie puede ser una variable, un numero o una cadena delimitada por comillas.
De esta forma podemos crear cuantas cookies necesitemos. Cuando se escribe por primera vez una cookie se genera automáticamente el fichero de texto correspondiente, pero si se escribe una cookie ya existente se produce el borrado de su antiguo contenido.
Hay que tener en cuenta que Response.Cookies pertenece a las cabeceras HTTP, lo cual significa que se debe enviar antes que el contenido de la página. Por lo tanto, la instrucción de escritura debe ir antes que la etiqueta <html> de apertura del documento.
En el caso de cookies diccionario (con claves), la sintaxis de escritura es:
Response.Cookies ("nombre_cookie") [("nombre_clave")] = "valor_clave"
Pudiendo escribir en una misma cookie cuantas claves deseemos, una tras otra.
Ejemplo:
<%
Response.Cookies ("usuario")("nombre") = "Pedro"
Response.Cookies ("usuario")("apellido") = "Martínez"
Response.Cookies
("usuario")("edad") = 30
%>
Que almacena en la cookie "usuario" el nombre, el apellido y la edad del usuario.
La colección Cookies tiene una serie de propiedades que van a configurar cada cookie que se escriba:
La propiedad Expires
Es importante saber que las cookies tienen una duración igual a la sesión del usuario, es decir, a menos que lo especifiquemos, el archivo texto generado se borrará desde el momento en que el usuario esté sin actividad en el sitio por un tiempo prolongado (generalmente unos 20 minutos, tiempo por defecto en que expira la sesión) o que el navegador haya sido cerrado.
Podemos arreglar este supuesto inconveniente mediante la propiedad Expires, cuya sintaxis general es del tipo:
Response.Cookies("nombre_cookie").Expires = fecha_caducidad
Donde fecha_caducidad puede ser cualquier fecha, variable o expresión que se pueda asimilar a una fecha.
Ejemplo:
Response.Cookies("usuario").Expires = #01/01/2002#
Si queremos que la cookie no expire nunca, podemos asignarle una fecha de caducidad relativa a la fecha actual, con lo que siempre que se carga cambia su caducidad. Podemos conseguir este objetivo usando cualesquiera de las funciones de fecha ya estudiadas, como DateAdd, cuya sintaxis es:
DateAdd(intervalo, numero, fecha)
Donde intervalo representa las unidades sobre las que vas a añadir a la fecha, numero define el número de intervalos a añadir y fecha es la fecha a partir de la cual se añade el número de intervalos.
Ejemplo:
<%
Response.Cookies("id").Expires = DateAdd("d", 1, Now)
%>
Con lo que definimos que la cookie debe caducar un día después de la fecha actual (obtenida mediante la función Now), es decir, nunca.
Hay que tener en cuenta que esta asignación no garantiza que la cookie esté presente hasta la fecha indicada, ya que el usuario es libre de eliminar el archivo cuando le plazca, accediendo a la carpeta Cookies y borrando su contenido.
En caso de que no se indique fecha de caducidad o se indique una fecha pasada, las cookie no se almacenará en la carpeta Cookies, sino que lo hará tan solo en los archivos temporales de Internet, con lo que para borrarla, el usuario debe acudir (en Internet Explorer) al menú Herramientas > Opciones de Internet > Archivos temporales de Internet > Eliminar archivos, con lo que borrará de su disco todas las cookies temporales.
La propiedad Domain
Por motivos de seguridad, las cookies sólo son accesibles por el sitio web que las ha escrito. Por lo tanto, cuando colocamos una cookie en el disco duro de un usuario debemos incluir en ella una referencia a nuestro servidor web, con objeto de que el navegador nos reconozca proceda a su envío cuando el usuario se vuelva a conectar a otra de nuestras páginas que necesite los datos contenidos en la cookie.
Esta tarea la vamos a realizar usando la propiedad Domain de la colección Cookies, que nos va a permitir asignar un nombre de dominio parcial o completo a la cookie, para el cual será válida. La sintaxis general de uso de la propiedad Domain es:
Response.Cookies ("nombre_cookie").Domain = "dominio"
Cuando el navegador y nuestro servidor web establecen una comunicación para realizar un proceso petición de página – envío de la misma, se intercambian previamente una serie de cabeceras HTTP, entre las que se incluye un valor domain, que contiene el dominio al que pertenece el servidor. Si la página solicitada pretende acceder a una cookie, el navegador compara el dominio especificado en la cookie con el del servidor, devolviendo a éste la cookie solo si ambos coinciden. Con ello se evita que servidores ajenos puedan acceder a cookies no escritas por ellos.
Ejemplo:
<%
Response.Cookies ("usuario")("ID") = "fulanito"
Response.Cookies ("usaurio")("password") = "2154OP"
Response.Cookies
("usuario").Expires = Date + 365
Response.Cookies ("usuario").Domain =
".miempresa.com"
%>
Con lo que el navegador devolverá la cookie a todas las máquinas (generalmente servidores web) cuyos dominios acaben en .miempresa.com, como .miempresa.com, www.central.miempresa.com o acceso.miempresa.com
Esta autorización de acceso múltiple a la cookie implica un problema de seguridad, ya que un "curioso" puede intentar acoplar en una de sus páginas un nombre de dominio de alto nivel, como .com. .es o .net. Esto se evita utilizando nombres de dominio que incluyan al menos dos puntos, como .miempresa.com o .midominio.net
La propiedad Path
A veces es conveniente no sólo especificar qué dominio o dominios tienes acceso a una cookie, sino también qué páginas van a poder leer los datos en ella almacenados. Esto se consigue con la propiedad Path de la colección Cookies, que actúa como un complemento de la propiedad Domain, y cuya sintaxis de uso es del tipo:
Response.Cookies ("usuario").Path = "ruta"
Donde ruta especifica la ruta de la carpeta cuyas subcarpetas y páginas van a tener permitido el acceso a la cookie.
Ejemplo:
Response.Cookies ("usuario").Path = "/"
Con lo que todas las páginas del dominio tienen permitido el acceso.
Ejemplo:
Response.Cookies ("usuario").Path = "/procesos"
Con lo que todas las páginas incluidas en la carpeta procesos y sus subcarpetas tienen permitido el acceso.
Si no se especifica esta propiedad, toma por defecto el valor de la carpeta en la que se encuentra la página que ha escrito la cookie, por lo que todas las páginas que cuelguen de la misma tendrán acceso a la cookie.
La propiedad Secure
Si deseamos implementar medidas de seguridad adicionales a una cookie, podemos especificar en su creación que sólo sea accesible por páginas transferidas entre el navegador del usuario y el servidor web a través de un canal seguro, como Secure Socket Layer (SSL).
Esta medida se implementa mediante la propiedad Secure de la colección Cookies, cuya sintaxis de uso es:
Response.Cookies ("usuario").Secure = 0 / 1
Es decir, funciona como un valor booleano, pudiendo tener dos valores: 0 (no se implementa la seguridad) y 1 (sí se implementa).
La propiedad HasKeys
Cuando accedemos a una clave para su lectura, podemos necesitar saber de antemano si se trata de una cookie diccionario, es decir, si contiene o no claves.
Esta tarea podemos realizarla con la propiedad HasKeys de la colección Cookies, que nos dice si una cookie dada posee claves, siendo normalmente utilizada en una estructura condicional, con la sintaxis:
If (Request.Cookies("nombre_cookie").HasKeys) Then ...