閱讀英文

共用方式為


管理 Cookie

在 HTTP 通訊協定下,伺服器或腳本會使用 Cookie 來維護用戶端工作站上的狀態資訊。 WinINet 函式已針對此目的實作持續性 Cookie 資料庫。 它們可用來在 中設定 Cookie,並從 Cookie 資料庫存取 Cookie。 如需詳細資訊,請參閱 HTTP Cookie

InternetSetCookieInternetGetCookie函式可用來管理 Cookie。

下列函式可讓應用程式在 Cookie 資料庫中建立或擷取 Cookie。

函式 描述
InternetGetCookie 擷取指定 URL 及其所有父 URL 的 Cookie。
InternetSetCookie 在指定的 URL 上設定 Cookie。

 

請注意,這些函式不需要呼叫 InternetOpen。 具有到期日的 Cookie 會儲存在使用者\「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 會儲存在使用者\「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 是一周的三個字母縮寫,DD 是月份的日期,MMM 是月份的三個字母縮寫,YYYY 是年份,而 HH:MM:SS 是軍事時間的當天時間。

下列範例示範對 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)