10 - Funciones para comer galletas

[editar]
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
30 de Noviembre de 1999


Todos sabemos lo que son estas pequeñas galletas (cookies) que últimamente las vemos aparecer por cualquier lado. Para los olvidadizos, diremos que una cookie es un pequeño archivo almacenado por una página web en nuestro disco duro, para grabar en él datos de configuración, preferencias de usuario, contraseñas, etc. De este modo, la página en cuestión es capaz de reconocernos al entrar en la página, o saber si ha habido cambios desde nuestra última visita.

Desde el propio API Wininet también es posible gestionar estos pequeños archivos, sin tener que recurrir al navegador, Javascript, CGI o cualquier otro sistema de programación web.

Las cookies están asociadas a una URL concreta, así que por cada URL podremos tener un sólo archivo de configuración, y dentro de él, uno o varios pares de datos "variable-valor".

Existen dos tipos de cookies, las que tienen fecha de caducidad, y las que se eliminan al terminar una sesión de internet.

Las primeras (llamadas cookies persistentes) deben crearse indicando la fecha a partir de la cual dejan de ser válidas.

Las segundas (llamadas cookies de sesión) se crean sin ninguna fecha, y no se almacenarán en el disco duro, sino que permanecen en memoria hasta el final del proceso que las creó.

Las funciones para manipular las cookies son sencillas:



InternetSetCookie

Esta función nos permite almacenar una cookie en nuestro sistema a partir de la URL especificada. Para realizar esta operación, se consultará en los parámetros de seguridad configurados en Internet Explorer, por lo que es posible que aparezca una ventana de aviso o restricción si así está configurado.

BOOL InternetSetCookie( LPCTSTR lpszUrl, LPCTSTR lpszVariable, LPCTSTR lpszValor );

  • lpszUrl: la URL asociada a la cookie. Si ya hay alguna cookie para esta URL, se utilizará el mismo archivo en el disco duro, en caso contrario, se creará uno nuevo.
  • lpszVariable: nombre de la variable a almacenar. Este será un nombre que posteriormente utilizaremos para leer el valor. Si pasamos el valor NULL (lo más habitual), se buscará el nombre dentro de la cadena lpszValor.
  • lpszValor: valor asociado a la variable. Además del valor en sí, se pueden incluír otras palabras clave para configurar el comportamiento de la cookie. La sintaxis general de esta cadena es:
<variable>=<valor>; [; expires=<fecha> [; domain=<nombre_dominio>]]
[; path=<ruta>] [; secure] [; httponly]Los valores encerrados entre < y > indican que debe sustituírse por un valor concreto, y los encerrados entre [ y ] son opcionales. Los distintas opciones tienen los siguientes significados:

    • expires: indica la fecha de caducidad para la cookie. El valor <fecha> debe ser una fecha y hora según el meridiano de Greewich y debe indicarse en formato DIA, DD-MMM-AAAA HH:MM:SS GTM, donde:
      • DIA: es el día de la semana, en inglés. Los posibles valores son: Mon, Tue, Wed, Thu, Fri, Sat y Sun.
      • DD-MMM-AAAA, la fecha en este formato. Los meses deben indicarse con las tres primeras letras de su nombre en inglés, siendo los siguientes valores los posibles: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov y Dec.
      • HH:MM:SS: la hora según este formato. La parte de horaria debe indicarse en el formato 24 horas.
      • GMT: esto es una constante que debe aparecer al final de la cadena, indicando que la fecha representa un valor correcto para el meridiano de Greenwich.
    • domain: indica el dominio a partir del cual la cookie es válida. Por ejemplo, si indicamos como dominio "ideas.grupoalbor.com", la cookie será válida para cualquier URL dentro de este dominio y subdominios. Este parámetros sólo es válido para cookies persistentes por lo que será ignorado si no indicamos una fecha de caducidad.
    • path: indica la ruta en el servidor a partir de la cual la cookie es válida. Por ejemplo, si indicamos la ruta "/ideas/delphi", la cookie será válida para las URLs de esta ruta, o cualquier otra dentro de esta.
    • secure: indica que la cookie sólo se transmitirá y será válida si estamos accediendo a la URL a través del protocolo HTTPS (HTTP secure).
    • httponly: indica que la cookie será codificada para leerse sólo desde los protocolos HTTP y HTTPS. En nuestro caso, esto significa que Wininet no tendría acceso a esta cookie.

La función retornará un valor booleano indicando éxito o fracaso.



InternetGetCookie

Esta función nos permite recuperar los valores de una cookie que previamente hayamos almacenado, ya sea a través de la función InternetSetCookie o desde una página web.

BOOL InternetGetCookie( LPCTSTR lpszUrl, LPCTSTR lpszVariable, LPTSTR lpszValores, LPDWORD lpdwTamaño );

  • lpszUrl: la URL asociada a la cookie. Es la URL a partir de la que se almacenó el valor.
  • lpszVariable: No está implementado, ya que esta función retorna todas las variables de una cookie dada a través del parámetro lpszValores.
  • lpszValores: apunta a un buffer en el que se copiarán los valores de la cookie. La sintaxis en que se retornan es <variable>=<valor> ; <variable>=<valor> ; <variable>=<valor>... Una vez que tenemos el valor de todas las variables, podemos tratar esta cadena desde nuestro programa, por ejemplo, buscando una variable concreta. Podemos evitar que se copien estos valores , pasando un puntero NULL.
  • lpdwTamaño: apunta a una variable en la que se indica el tamaño del buffer que pasamos en lpszValores. Si la función ha tenido espacio suficiente en el buffer, nos copiarán en esta variable el número de caracteres copiados. Si no ha tenido espacio suficiente, o hemos pasado lpszValores a NULL, nos retornará el número de caracteres necesarios para copiar la cookie completa.

La función retornará TRUE o FALSE dependiendo de su éxito. En caso de error, GetLastError nos puede devolver alguno de estos errores, entre otros:

  • ERROR_NO_MORE_ITEMS: No hay ninguna cookie asociada a la URL indicada.
  • ERROR_INSUFFICIENT_BUFFER: el buffer pasado en lpszValores es demasiado pequeño. En este caso se nos copiará en la variable dwTamaño el espacio requerido.
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'Los rincones del API Win32: Introducción al API WinInet'

Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32.... Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño... Más »
Entramos en temas interesantes: el acceso a recursos remotos a través del protocolo de aplicación... Más »
En el anterior curso dejamos muchos temas en el tintero, así que voy a terminar... Más »
Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »

Autor y licencia de 'Los rincones del API Win32: Introducción al API WinInet'


Tutorial de Juan Manuel. Extraido de: http://www.lawebdejm.com CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.