Gestione dei cookie

Nel protocollo HTTP, un server o uno script usa i cookie per mantenere le informazioni sullo stato nella workstation client. A questo scopo, le funzioni WinINet hanno implementato un database cookie persistente. Possono essere usati per impostare i cookie in e accedere ai cookie dal database dei cookie. Per altre informazioni, vedere Cookie HTTP.

Le funzioni InternetSetCookie e InternetGetCookie possono essere usate per gestire i cookie.

Le funzioni seguenti consentono a un'applicazione di creare o recuperare cookie nel database dei cookie.

Funzione Descrizione
InternetGetCookie Recupera i cookie per l'URL specificato e tutti gli URL padre.
InternetSetCookie Imposta un cookie sull'URL specificato.

 

Si noti che queste funzioni non richiedono una chiamata a InternetOpen. I cookie con una data di scadenza vengono archiviati nell'account utente locale in Utenti\"nomeutente"\AppData\Roaming\Microsoft\Windows\Cookies e utenti\"nomeutente"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory per le applicazioni in esecuzione con privilegi limitati. I cookie che non hanno una data di scadenza vengono archiviati in memoria e sono disponibili solo per il processo in cui sono stati creati.

Come indicato nell'argomento Cookie HTTP , la funzione InternetGetCookie non restituisce cookie contrassegnati dal server come non scriptable con l'attributo "HttpOnly" nell'intestazione Set-Cookie.

InternetGetCookie restituisce i cookie per l'URL specificato e tutti gli URL padre.

Nell'esempio seguente viene illustrata una chiamata 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;
}

InternetSetCookie viene usato per impostare un cookie sull'URL specificato. InternetSetCookie può creare cookie persistenti e di sessione.

I cookie permanenti hanno una data di scadenza. Questi cookie vengono archiviati nell'account utente locale in Utenti\"nomeutente"\AppData\Roaming\Microsoft\Windows\Cookies e utenti\"nomeutente"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory per le applicazioni in esecuzione con privilegi limitati.

I cookie di sessione vengono archiviati in memoria e sono accessibili solo dal processo che li ha creati.

I dati per il cookie devono essere nel formato seguente:

NAME=VALUE

Per la data di scadenza, il formato deve essere:

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

DAY è l'abbreviazione di tre lettere per il giorno della settimana, DD è il giorno del mese, MMM è l'abbreviazione di tre lettere per il mese, AAAA è l'anno e HH:MM:SS è l'ora del giorno in tempo militare.

Nell'esempio seguente vengono illustrate due chiamate a InternetSetCookie. La prima chiamata crea un cookie di sessione e il secondo crea un cookie permanente.

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 non supporta le implementazioni del server. Inoltre, non deve essere usato da un servizio. Per le implementazioni del server o i servizi, usare i servizi HTTP di Microsoft Windows (WinHTTP).