Udostępnij za pośrednictwem


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.

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.

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

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