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 di cookie persistente. Possono essere utilizzati per impostare e accedere ai cookie nel database dei cookie. Per altre informazioni, vedere HTTP Cookies.
Le funzioniInternetSetCookiee InternetGetCookie possono essere usate per gestire i cookie.
Uso di funzioni 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 nella directory Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies e nella directory Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low per le applicazioni che funzionano 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.
Ottenere un cookie
InternetGetCookie restituisce i cookie per l'URL specificato e tutti gli URL di origine.
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;
}
Impostazione di un cookie
InternetSetCookie viene usato per impostare un cookie sull'URL specificato. InternetSetCookie può creare cookie permanenti e di sessione.
I cookie permanenti hanno una data di scadenza. Questi cookie vengono archiviati nell'account utente locale in Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies directory e Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory per le applicazioni che vengono eseguite con privilegi ridotti.
I cookie di sessione vengono archiviati in memoria e possono essere 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, AAAAa è 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 tramite un servizio. Per le implementazioni del server o i servizi, usare Servizi HTTP Di Microsoft Windows (WinHTTP).