다음을 통해 공유


쿠키 관리

http 프로토콜에서 서버 또는 스크립트는 쿠키를 사용하여 클라이언트 워크스테이션에 대한 상태 정보를 유지 관리합니다. WinINet 함수는 이 목적을 위해 영구 쿠키 데이터베이스를 구현했습니다. 쿠키 데이터베이스에서 쿠키를 설정하고 쿠키에 액세스하는 데 사용할 수 있습니다. 자세한 내용은 HTTP 쿠키를 참조하세요.

InternetSetCookieInternetGetCookie 함수를 사용하여 쿠키를 관리할 수 있습니다.

다음 함수를 사용하면 애플리케이션이 쿠키 데이터베이스에서 쿠키를 만들거나 검색할 수 있습니다.

함수 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 서비스)를 사용합니다.