쿠키 관리
http 프로토콜에서 서버 또는 스크립트는 쿠키를 사용하여 클라이언트 워크스테이션에 대한 상태 정보를 유지 관리합니다. WinINet 함수는 이 목적을 위해 영구 쿠키 데이터베이스를 구현했습니다. 쿠키 데이터베이스에서 쿠키를 설정하고 쿠키에 액세스하는 데 사용할 수 있습니다. 자세한 내용은 HTTP 쿠키를 참조하세요.
InternetSetCookie 및 InternetGetCookie 함수를 사용하여 쿠키를 관리할 수 있습니다.
쿠키 함수 사용
다음 함수를 사용하면 애플리케이션이 쿠키 데이터베이스에서 쿠키를 만들거나 검색할 수 있습니다.
함수 | Description |
---|---|
InternetGetCookie | 지정된 URL 및 모든 부모 URL에 대한 쿠키를 검색합니다. |
InternetSetCookie | 지정된 URL에 쿠키를 설정합니다. |
이러한 함수는 InternetOpen을 호출할 필요가 없습니다. 만료 날짜가 있는 쿠키는 User\"username"\AppData\Roaming\Microsoft\Windows\Cookies 디렉터리 아래의 로컬 사용자 계정에 저장되고, 낮은 권한으로 실행되는 애플리케이션의 경우 Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low 디렉터리에 저장됩니다. 만료 날짜가 없는 쿠키는 메모리에 저장되며 생성된 프로세스에서만 사용할 수 있습니다.
HTTP 쿠키 항목에서 설명한 것처럼 InternetGetCookie 함수는 Set-Cookie 헤더에서 "HttpOnly" 특성을 사용하여 서버에서 스크립트할 수 없는 것으로 표시된 쿠키를 반환하지 않습니다.
쿠키 가져오기
InternetGetCookie 는 지정된 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;
}
쿠키 설정
InternetSetCookie 는 지정된 URL에 쿠키를 설정하는 데 사용됩니다. InternetSetCookie 는 영구 쿠키와 세션 쿠키를 모두 만들 수 있습니다.
영구 쿠키의 만료 날짜가 있습니다. 이러한 쿠키는 낮은 권한으로 실행되는 애플리케이션에 대한 Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies 디렉터리 및 Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low 디렉터리 아래의 로컬 사용자 계정에 저장됩니다.
세션 쿠키는 메모리에 저장되며 이를 만든 프로세스에서만 액세스할 수 있습니다.
쿠키의 데이터는 형식이어야 합니다.
NAME=VALUE
만료 날짜의 경우 형식은 다음과 여야 합니다.
DAY, DD-MMM-YYYY HH:MM:SS GMT
DAY는 요일에 대한 3자 약어이고, DD는 월의 날짜이고, MMM은 해당 월의 3자 약어이고, YYYY는 연도이고, HH:MM:SS는 군사 시간의 하루 중 시간입니다.
다음 예제에서는 InternetSetCookie에 대한 두 가지 호출을 보여 줍니다. 첫 번째 호출은 세션 쿠키를 만들고 두 번째 호출은 영구 쿠키를 만듭니다.
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은 서버 구현을 지원하지 않습니다. 또한 서비스에서 사용하지 않아야 합니다. 서버 구현 또는 서비스의 경우 WinHTTP(Microsoft Windows HTTP 서비스)를 사용합니다.