Administración de cookies
En el protocolo http, un servidor o un script usa cookies para mantener información de estado en la estación de trabajo cliente. Las funciones de WinINet han implementado una base de datos de cookies persistente para este fin. Se pueden usar para establecer cookies en la base de datos de cookies y acceder a ellas. Para más información, consulte Cookies HTTP.
Las funciones InternetSetCookie e InternetGetCookie se pueden usar para administrar cookies.
Uso de funciones de cookie
Las siguientes funciones permiten a una aplicación crear o recuperar cookies en la base de datos de cookies.
Función | Descripción |
---|---|
InternetGetCookie | Recupera cookies para la dirección URL especificada y todas sus direcciones URL primarias. |
InternetSetCookie | Establece una cookie en la dirección URL especificada. |
Tenga en cuenta que estas funciones no requieren una llamada a InternetOpen. Las cookies que tienen una fecha de expiración se almacenan en la cuenta de usuarios locales en Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies directory, y el directorio Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory para las aplicaciones que se ejecutan bajo privilegios bajos. Las cookies que no tienen una fecha de expiración se almacenan en memoria y solo están disponibles para el proceso en el que se crearon.
Como se indicó en el tema Cookies HTTP , la función InternetGetCookie no devuelve cookies marcadas por el servidor como no scriptable con el atributo "HttpOnly" en el encabezado Set-Cookie.
Obtención de una cookie
InternetGetCookie devuelve las cookies de la dirección URL especificada y todas sus direcciones URL primarias.
En el ejemplo siguiente se muestra una llamada a InternetGetCookie.
TCHAR szURL[256]; // buffer to hold the URL
LPTSTR lpszData = NULL; // buffer to hold the cookie data
DWORD dwSize=0; // variable to get the buffer size needed
// Insert code to retrieve the URL.
retry:
// The first call to InternetGetCookie will get the required
// buffer size needed to download the cookie data.
if (!InternetGetCookie(szURL, NULL, lpszData, &dwSize))
{
// Check for an insufficient buffer error.
if (GetLastError()== ERROR_INSUFFICIENT_BUFFER)
{
// Allocate the necessary buffer.
lpszData = new TCHAR[dwSize];
// Try the call again.
goto retry;
}
else
{
// Insert error handling code.
}
}
else
{
// Insert code to display the cookie data.
// Release the memory allocated for the buffer.
delete[]lpszData;
}
Establecer una cookie
InternetSetCookie se usa para establecer una cookie en la dirección URL especificada. InternetSetCookie puede crear cookies persistentes y de sesión.
Las cookies persistentes tienen una fecha de expiración. Estas cookies se almacenan en la cuenta de usuarios locales en Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies directory, y el directorio Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory para las aplicaciones que se ejecutan con pocos privilegios.
Las cookies de sesión se almacenan en memoria y solo pueden acceder al proceso que las creó.
Los datos de la cookie deben tener el formato :
NAME=VALUE
Para la fecha de expiración, el formato debe ser:
DAY, DD-MMM-YYYY HH:MM:SS GMT
DAY es la abreviatura de tres letras del día de la semana, DD es el día del mes, MMM es la abreviatura de tres letras del mes, AAAA es el año y HH:MM:SS es la hora del día en el tiempo militar.
En el ejemplo siguiente se muestran dos llamadas a InternetSetCookie. La primera llamada crea una cookie de sesión y la segunda crea una cookie persistente.
BOOL bReturn;
// Create a session cookie.
bReturn = InternetSetCookie(TEXT("https://www.adventure_works.com"), NULL,
TEXT("TestData = Test"));
// Create a persistent cookie.
bReturn = InternetSetCookie(TEXT("https://www.adventure_works.com"), NULL,
TEXT("TestData = Test; expires = Sat,01-Jan-2000 00:00:00 GMT"));
Nota
WinINet no admite implementaciones de servidor. Además, no se debe usar desde un servicio. En el caso de las implementaciones de servidor o los servicios, use los servicios HTTP de Microsoft Windows (WinHTTP).