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.
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 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.
Recupero di un 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;
}
Impostazione di un cookie
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).