Hantera cookies
Under http-protokollet använder en server eller ett skript cookies för att underhålla tillståndsinformation på klientarbetsstationen. WinINet-funktionerna har implementerat en beständig cookiedatabas för detta ändamål. De kan användas för att ange cookies i och få åtkomst till cookies från cookiedatabasen. Mer information finns i HTTP-cookies.
Funktionerna InternetSetCookie och InternetGetCookie kan användas för att hantera cookies.
Använda cookiefunktioner
Med följande funktioner kan ett program skapa eller hämta cookies i cookiedatabasen.
Funktion | Beskrivning |
---|---|
InternetGetCookie | Hämtar cookies för den angivna URL:en och alla dess överordnade URL:er. |
InternetSetCookie | Anger en cookie på den angivna URL:en. |
Observera att dessa funktioner inte kräver ett anrop till InternetOpen. Cookies som har ett utgångsdatum lagras i det lokala användarkontot under Användare\"användarnamn"\AppData\Roaming\Microsoft\Windows\Cookies-katalogen och katalogen Användare\"användarnamn"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory för program som körs under låg behörighet. Cookies som inte har ett förfallodatum lagras i minnet och är endast tillgängliga för den process där de skapades.
Som anges i avsnittet HTTP-cookies returnerar inte funktionen InternetGetCookie cookies som har markerats av servern som icke-skriptbara med attributet "HttpOnly" i Set-Cookie-huvudet.
Hämta en cookie
InternetGetCookie returnerar cookies för den angivna URL:en och alla dess överordnade URL:er.
I följande exempel visas ett anrop till 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;
}
Skapa en cookie
InternetSetCookie används för att ange en cookie på den angivna URL:en. InternetSetCookie kan skapa både beständiga cookies och sessionscookies.
Beständiga cookies har ett utgångsdatum. Dessa cookies lagras i det lokala användarkontot under Användare\"användarnamn"\AppData\Roaming\Microsoft\Windows\Cookies-katalogen och katalogen Användare\"användarnamn"\AppData\Roaming\Microsoft\Windows\Cookies\Low directory för program som körs med låg behörighet.
Sessionscookies lagras i minnet och kan endast nås av processen som skapade dem.
Data för cookien ska vara i formatet:
NAME=VALUE
För förfallodatumet måste formatet vara:
DAY, DD-MMM-YYYY HH:MM:SS GMT
DAY är förkortningen med tre bokstäver för veckodagen, DD är dagen i månaden, MMM är förkortningen med tre bokstäver för månaden, ÅÅÅÅ är året och HH:MM:SS är tiden på dagen i militär tid.
I följande exempel visas två anrop till InternetSetCookie. Det första anropet skapar en sessionscookie och den andra skapar en beständig cookie.
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"));
Not
WinINet stöder inte serverimplementeringar. Dessutom bör den inte användas från en tjänst. För serverimplementeringar eller tjänster använder du Microsoft Windows HTTP Services (WinHTTP).