Dela via


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.

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.

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;
}

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).