Gestion des cookies

Sous le protocole http, un serveur ou un script utilise des cookies pour conserver les informations d’état sur la station de travail cliente. Les fonctions WinINet ont implémenté une base de données de cookies persistante à cet effet. Ils peuvent être utilisés pour définir des cookies et y accéder à partir de la base de données de cookies. Pour plus d’informations, consultez Cookies HTTP.

Les fonctions InternetSetCookie et InternetGetCookie peuvent être utilisées pour gérer les cookies.

Les fonctions suivantes permettent à une application de créer ou de récupérer des cookies dans la base de données de cookies.

Fonction Description
InternetGetCookie Récupère les cookies pour l’URL spécifiée et toutes ses URL parentes.
InternetSetCookie Définit un cookie sur l’URL spécifiée.

 

Notez que ces fonctions ne nécessitent pas d’appel à InternetOpen. Les cookies ayant une date d’expiration sont stockés dans le compte d’utilisateurs locaux sous le répertoire Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies, et le répertoire Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low pour les applications s’exécutant avec des privilèges faibles. Les cookies qui n’ont pas de date d’expiration sont stockés en mémoire et ne sont disponibles que pour le processus dans lequel ils ont été créés.

Comme indiqué dans la rubrique Cookies HTTP , la fonction InternetGetCookie ne retourne pas les cookies qui ont été marqués par le serveur comme non scriptables avec l’attribut « HttpOnly » dans l’en-tête Set-Cookie.

InternetGetCookie retourne les cookies pour l’URL spécifiée et toutes ses URL parentes.

L’exemple suivant illustre un appel à 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;
}

InternetSetCookie est utilisé pour définir un cookie sur l’URL spécifiée. InternetSetCookie peut créer des cookies persistants et de session.

Les cookies persistants ont une date d’expiration. Ces cookies sont stockés dans le compte d’utilisateurs locaux sous le répertoire Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies et le répertoire Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low pour les applications s’exécutant avec des privilèges faibles.

Les cookies de session sont stockés en mémoire et sont accessibles uniquement par le processus qui les a créés.

Les données du cookie doivent être au format suivant :

NAME=VALUE

Pour la date d’expiration, le format doit être :

DAY, DD-MMM-YYYY HH:MM:SS GMT

DAY est l’abréviation de trois lettres pour le jour de la semaine, DD est le jour du mois, MMM est l’abréviation à trois lettres pour le mois, AAAA est l’année et HH:MM:SS est l’heure du jour en temps militaire.

L’exemple suivant illustre deux appels à InternetSetCookie. Le premier appel crée un cookie de session et le second crée un cookie persistant.

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"));

Notes

WinINet ne prend pas en charge les implémentations de serveur. En outre, il ne doit pas être utilisé à partir d’un service. Pour les implémentations de serveur ou les services, utilisez Microsoft Windows HTTP Services (WinHTTP).