Zarządzanie plikami cookie
W ramach protokołu HTTP serwer lub skrypt używa plików cookie do obsługi informacji o stanie na stacji roboczej klienta. W tym celu funkcje WinINet zaimplementowały trwałą bazę danych plików cookie. Mogą służyć do ustawiania plików cookie w bazie danych plików cookie i uzyskiwania do nich dostępu. Aby uzyskać więcej informacji, zobacz pliki cookie HTTP.
Funkcje InternetSetCookie i InternetGetCookie mogą służyć do zarządzania plikami cookie.
Korzystanie z funkcji plików cookie
Poniższe funkcje umożliwiają aplikacji tworzenie lub pobieranie plików cookie w bazie danych plików cookie.
Funkcja | Opis |
---|---|
InternetGetCookie | Pobiera pliki cookie dla określonego adresu URL i wszystkich jego nadrzędnych adresów URL. |
InternetSetCookie | Ustawia plik cookie w określonym adresie URL. |
Należy pamiętać, że te funkcje nie wymagają wywołania funkcji InternetOpen. Pliki cookie, które mają datę wygaśnięcia, są przechowywane na koncie lokalnego użytkownika w katalogu Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies, oraz w katalogu Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low dla aplikacji działających z niskimi uprawnieniami. Pliki cookie, które nie mają daty wygaśnięcia, są przechowywane w pamięci i są dostępne tylko dla procesu, w którym zostały utworzone.
Jak wspomniano w temacie plików cookie HTTP, funkcja InternetGetCookie nie zwraca plików cookie oznaczonych przez serwer jako nieskryptowalne za pomocą atrybutu "HttpOnly" w nagłówku Set-Cookie.
Pobieranie pliku cookie
InternetGetCookie zwraca pliki cookie dla określonego adresu URL i wszystkich jego nadrzędnych adresów URL.
W poniższym przykładzie przedstawiono wywołanie funkcji 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;
}
Ustawianie pliku cookie
InternetSetCookie służy do ustawiania pliku cookie pod określonym adresem URL. InternetSetCookie mogą tworzyć zarówno trwałe, jak i sesyjne pliki cookie.
Trwałe pliki cookie mają datę wygaśnięcia. Te ciasteczka są przechowywane na koncie użytkowników lokalnych w katalogu Użytkownicy\"nazwa_użytkownika"\AppData\Roaming\Microsoft\Windows\Cookies oraz w katalogu Użytkownicy\"nazwa_użytkownika"\AppData\Roaming\Microsoft\Windows\Cookies\Low dla aplikacji działających pod niskimi uprawnieniami.
Pliki cookie sesji są przechowywane w pamięci i mogą być dostępne tylko przez proces, do którego zostały utworzone.
Dane pliku cookie powinny mieć format:
NAME=VALUE
Dla daty wygaśnięcia format musi być następujący:
DAY, DD-MMM-YYYY HH:MM:SS GMT
DAY to trzyliterowy skrót dnia tygodnia, DD jest dniem miesiąca, MMM jest trzyliterowym skrótem miesiąca, RRRR jest rokiem, a HH:MM:SS jest godziną dnia w czasie wojskowym.
W poniższym przykładzie pokazano dwa wywołania InternetSetCookie. Pierwsze wywołanie tworzy plik cookie sesji, a drugi tworzy trwały plik 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"));
Notatka
Usługa WinINet nie obsługuje implementacji serwera. Ponadto nie należy jej używać z serwisu. W przypadku implementacji serwera lub usług należy użyć usług HTTP systemu Microsoft Windows (WinHTTP).