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 Cookie-Datenbank implementiert. Sie können verwendet werden, um Cookies in der Cookie-Datenbank zu setzen und auf Cookies zuzugreifen. Weitere Informationen finden Sie unter HTTP-Cookies.
Die Funktionen InternetSetCookie und InternetGetCookie können zum Verwalten von Cookies verwendet werden.
Verwenden von Cookiefunktionen
Die folgenden Funktionen ermöglichen es einer Anwendung, Cookies in der Cookie-Datenbank zu erstellen oder abzurufen.
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 für diese Funktionen kein Aufruf von InternetOpen erforderlich ist. Cookies, die über ein Ablaufdatum verfügen, werden im lokalen Benutzerkonto unter Benutzer\"Benutzername"\AppData\Roaming\Microsoft\Windows\Cookies-Verzeichnis und im Verzeichnis Benutzer\"Benutzername"\AppData\Roaming\Microsoft\Windows\Cookies\Low für Anwendungen gespeichert, die unter niedrigen Berechtigungen ausgeführt werden. Cookies ohne Ablaufdatum werden im Speicher gespeichert und stehen nur für den Prozess zur Verfügung, 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 Set-Cookie-Header gekennzeichnet wurden.
Abrufen eines Cookies
InternetGetCookie gibt die Cookies für die angegebene URL und alle übergeordneten URLs zurück.
Das folgende Beispiel veranschaulicht einen Aufruf von 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;
}
Festlegen eines Cookies
InternetSetCookie wird verwendet, um ein Cookie für die angegebene URL festzulegen. InternetSetCookie kann sowohl persistente als auch Sitzungscookies erstellen.
Persistente Cookies haben ein Ablaufdatum. Diese Cookies werden im lokalen Benutzerkonto unter Benutzer\"Benutzername"\AppData\Roaming\Microsoft\Windows\Cookies-Verzeichnis und im Verzeichnis Benutzer\"benutzername"\AppData\Roaming\Microsoft\Windows\Cookies\Low" für Anwendungen gespeichert, die unter niedrigen 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 folgendes Format aufweisen:
NAME=VALUE
Für das Ablaufdatum muss das Format folgendes sein:
DAY, DD-MMM-YYYY HH:MM:SS GMT
DAY ist die Drei-Buchstaben-Abkürzung für den Wochentag, DD ist der Tag des Monats, MMM ist die Drei-Buchstaben-Abkürzung für den Monat, JJJJ ist das Jahr, und HH:MM:SS ist die Uhrzeit des Tages in militärischer Zeit.
Im folgenden Beispiel werden zwei Aufrufe von InternetSetCookie veranschaulicht. Der erste Aufruf erstellt ein Sitzungscooky 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 Serverimplementierungen. Darüber hinaus sollte es nicht von einem Dienst aus verwendet werden. Verwenden Sie für Serverimplementierungen oder Dienste Microsoft Windows HTTP Services (WinHTTP).