Verwalten von Cookies

Unter dem HTTP-Protokoll verwendet ein Server oder ein Skript Cookies, um Zustandsinformationen auf der Clientarbeitsstation zu verwalten. Die WinINet-Funktionen haben zu diesem Zweck eine persistente Cookiedatenbank implementiert. Sie können verwendet werden, um Cookies in der Cookiedatenbank zu setzen und auf Cookies zu zugreifen. Weitere Informationen finden Sie unter HTTP-Cookies.

Die Funktionen InternetSetCookie und InternetGetCookie können zum Verwalten von Cookies verwendet werden.

Mit den folgenden Funktionen kann eine Anwendung Cookies in der Cookiedatenbank erstellen oder abrufen.

Funktion Beschreibung
InternetGetCookie Ruft Cookies für die angegebene URL und alle übergeordneten URLs ab.
InternetSetCookie Legt ein Cookie für die angegebene URL fest.

Beachten Sie, dass diese Funktionen keinen Aufruf von InternetOpen erfordern. Cookies, die über ein Ablaufdatum verfügen, werden im lokalen Benutzerkonto unter Benutzer "Benutzername" AppData Roaming Microsoft Windows Cookies und im Verzeichnis Benutzer \ \ \ \ \ \ \ "Benutzername" \ AppData Roaming Microsoft Windows Cookies \ \ \ \ \ Low für Anwendungen gespeichert, die mit geringen Berechtigungen ausgeführt werden. Cookies ohne Ablaufdatum werden im Arbeitsspeicher gespeichert und sind nur für den Prozess verfügbar, in dem sie erstellt wurden.

Wie im Thema HTTP-Cookies erwähnt, gibt die InternetGetCookie-Funktion keine Cookies zurück, die vom Server als nicht skriptfähig mit dem Attribut "HttpOnly" im header Set-Cookie wurden.

InternetGetCookie gibt die Cookies für die angegebene URL und alle übergeordneten URLs zurück.

Im folgenden Beispiel wird ein Aufruf von InternetGetCookie veranschaulicht.

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 wird verwendet, um ein Cookie für die angegebene URL festzulegen. InternetSetCookie kann sowohl persistente Cookies als auch Sitzungscookies erstellen.

Persistente Cookies haben ein Ablaufdatum. Diese Cookies werden im lokalen Benutzerkonto unter Benutzer "Benutzername" AppData Roaming Microsoft Windows Cookies und im Verzeichnis Benutzer \ \ \ \ \ \ \ "Benutzername" \ AppData Roaming Microsoft Windows Cookies \ \ \ \ \ Low für Anwendungen gespeichert, die mit geringen Berechtigungen ausgeführt werden.

Sitzungscookies werden im Arbeitsspeicher gespeichert und können nur von dem Prozess aufgerufen werden, der sie erstellt hat.

Die Daten für das Cookie sollten im folgenden Format vorliegen:

NAME=VALUE

Für das Ablaufdatum muss das Format wie im folgenden Format sein:

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

DAY ist die Drei-Buchstaben-Abkürzung für den Tag der Woche, DD ist der Tag des Monats, MMM ist die Drei-Buchstaben-Abkürzung für den Monat, YYYY ist das Jahr, und HH:MM:SS ist die Uhrzeit des Tages in der Zeit des Landes.

Im folgenden Beispiel werden zwei Aufrufe von InternetSetCookie veranschaulicht. Der erste Aufruf erstellt ein Sitzungscookie und der zweite ein persistentes 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"));

Hinweis

WinINet unterstützt keine Serverimplementierung. Darüber hinaus sollte sie nicht von einem Dienst verwendet werden. Verwenden Sie für Serverimplementierungen oder -dienste Microsoft Windows HTTP Services (WinHTTP).