Cookie の管理

http プロトコルでは、サーバーまたはスクリプトは Cookie を使用してクライアント ワークステーション上の状態情報を維持します。 WinINet 関数では、この目的のために永続的な Cookie データベースが実装されています。 Cookie データベースから Cookie を設定したり、Cookie にアクセスしたりするために使用できます。 詳細については、「 HTTP Cookie」を参照してください。

InternetSetCookie 関数と InternetGetCookie 関数を使用して、Cookie を管理できます。

次の関数を使用すると、アプリケーションは Cookie データベース内で Cookie を作成または取得できます。

機能 説明
InternetGetCookie 指定した URL とそのすべての親 URL の Cookie を取得します。
InternetSetCookie 指定した URL に Cookie を設定します。

 

これらの関数は InternetOpen の呼び出しを必要としないことに注意してください。 有効期限が設定されている Cookie は、Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies ディレクトリの下のローカル ユーザー アカウントに格納され、低い特権で実行されているアプリケーションの Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low ディレクトリに格納されます。 有効期限のない Cookie はメモリに格納され、作成されたプロセスでのみ使用できます。

HTTP Cookie のトピックで説明したように、InternetGetCookie 関数は、サーバーによってスクリプト化できないとマークされた Cookie を、Set-Cookie ヘッダーの "HttpOnly" 属性で返しません。

InternetGetCookie は 、指定した URL とそのすべての親 URL の Cookie を返します。

次の例では、 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 に Cookie を設定するために使用されます。 InternetSetCookie では 、永続的 Cookie とセッション 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

DAY は曜日の 3 文字の省略形、DD は月の日、MMM は月の 3 文字の省略形、YYYY は年、HH:MM:SS は軍事時間の時刻です。

次の例では、 InternetSetCookie の 2 つの呼び出しを示します。 最初の呼び出しではセッション Cookie が作成され、2 番目の呼び出しでは永続的な 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"));

Note

WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、 Microsoft Windows HTTP サービス (WinHTTP) を使用します。