Bagikan melalui


Mengelola Cookie

Di bawah protokol http, server atau skrip menggunakan cookie untuk mempertahankan informasi status di stasiun kerja klien. Fungsi WinINet telah menerapkan database cookie persisten untuk tujuan ini. Mereka dapat digunakan untuk mengatur cookie di dan mengakses cookie dari database cookie. Untuk informasi selengkapnya, lihat Cookie HTTP.

Fungsi InternetSetCookie dan InternetGetCookie dapat digunakan untuk mengelola cookie.

Fungsi berikut memungkinkan aplikasi untuk membuat atau mengambil cookie dalam database cookie.

Fungsi Deskripsi
InternetGetCookie Mengambil cookie untuk URL yang ditentukan dan semua URL induknya.
InternetSetCookie Mengatur cookie pada URL yang ditentukan.

 

Perhatikan bahwa fungsi-fungsi ini tidak memerlukan panggilan ke InternetBuka. Cookie yang memiliki tanggal kedaluwarsa disimpan di akun pengguna lokal di bawah direktori Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies, dan direktori Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low untuk aplikasi yang berjalan dengan hak istimewa rendah. Cookie yang tidak memiliki tanggal kedaluwarsa disimpan dalam memori dan hanya tersedia untuk proses pembuatannya.

Seperti yang disebutkan dalam topik Cookie HTTP , fungsi InternetGetCookie tidak mengembalikan cookie yang telah ditandai oleh server sebagai tidak dapat ditulis dengan atribut "HttpOnly" di header Set-Cookie.

InternetGetCookie mengembalikan cookie untuk URL yang ditentukan dan semua URL induknya.

Contoh berikut menunjukkan panggilan ke 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 digunakan untuk mengatur cookie pada URL yang ditentukan. InternetSetCookie dapat membuat cookie persisten dan sesi.

Cookie persisten memiliki tanggal kedaluwarsa. Cookie ini disimpan di akun pengguna lokal di bawah direktori Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies, dan direktori Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low untuk aplikasi yang berjalan dengan hak istimewa rendah.

Cookie sesi disimpan dalam memori dan hanya dapat diakses oleh proses yang membuatnya.

Data untuk cookie harus dalam format:

NAME=VALUE

Untuk tanggal kedaluwarsa, formatnya harus:

DAY, DD-MMM-YYYY HH:MM:SS GMT

HARI adalah singkatan tiga huruf untuk hari dalam seminggu, DD adalah hari dalam sebulan, MMM adalah singkatan tiga huruf untuk bulan tersebut, YYYY adalah tahun, dan HH:MM:SS adalah waktu dalam waktu militer.

Contoh berikut menunjukkan dua panggilan ke InternetSetCookie. Panggilan pertama membuat cookie sesi dan yang kedua membuat cookie persisten.

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"));

Catatan

WinINet tidak mendukung implementasi server. Selain itu, itu tidak boleh digunakan dari layanan. Untuk implementasi atau layanan server, gunakan Microsoft Windows HTTP Services (WinHTTP).