Управление файлами cookie
По протоколу HTTP сервер или скрипт используют файлы cookie для хранения сведений о состоянии на клиентской рабочей станции. Функции WinINet реализовали для этой цели постоянную базу данных cookie. Их можно использовать для установки файлов cookie в и доступа к файлам cookie из базы данных cookie. Дополнительные сведения см. в разделе Файлы cookie HTTP.
Для управления файлами cookie можно использовать функции InternetSetCookie и InternetGetCookie .
Использование функций cookie
Следующие функции позволяют приложению создавать или извлекать файлы cookie в базе данных cookie.
Функция | Описание |
---|---|
InternetGetCookie | Извлекает файлы cookie для указанного URL-адреса и всех его родительских URL-адресов. |
InternetSetCookie | Задает файл cookie по указанному URL-адресу. |
Обратите внимание, что для этих функций не требуется вызов InternetOpen. Файлы cookie с датой окончания срока действия хранятся в учетной записи локальных пользователей в папке Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies и в каталоге Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low для приложений, работающих с низкими привилегиями. Файлы cookie без даты окончания срока действия хранятся в памяти и доступны только для процесса, в котором они были созданы.
Как указано в разделе Файлы cookie HTTP , функция InternetGetCookie не возвращает файлы cookie, помеченные сервером как некриптуируемые с помощью атрибута "HttpOnly" в заголовке Set-Cookie.
Получение файла cookie
InternetGetCookie возвращает файлы cookie для указанного URL-адреса и всех его родительских URL-адресов.
В следующем примере показан вызов 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;
}
Настройка файла cookie
InternetSetCookie используется для задания файла cookie по указанному URL-адресу. InternetSetCookie может создавать как постоянные, так и сеансовые файлы cookie.
Постоянные файлы cookie имеют дату окончания срока действия. Эти файлы cookie хранятся в учетной записи локальных пользователей в папке Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies и в каталоге Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low для приложений, работающих с низкими привилегиями.
Файлы cookie сеанса хранятся в памяти и доступны только созданному процессу.
Данные для файла cookie должны иметь следующий формат:
NAME=VALUE
Для даты окончания срока действия формат должен быть следующим:
DAY, DD-MMM-YYYY HH:MM:SS GMT
ДЕНЬ — это трехбуквенное сокращение для дня недели, ДД — день месяца, МММ — это трехбуквенное сокращение месяца, ГГГГ — год, а ЧЧ:ММ:СС — время дня в военном времени.
В следующем примере показаны два вызова InternetSetCookie. Первый вызов создает файл cookie сеанса, а второй — постоянный файл 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"));
Примечание
WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для серверных реализаций или служб используйте службы Microsoft Windows HTTP (WinHTTP).