Gerenciando cookies

No protocolo http, um servidor ou script usa cookies para manter informações de estado na estação de trabalho do cliente. As funções WinINet implementaram um banco de dados de cookie persistente para essa finalidade. Eles podem ser usados para definir cookies no e acessar cookies do banco de dados de cookie. Para obter mais informações, consulte Cookies HTTP.

As funções InternetSetCookie e InternetGetCookie podem ser usadas para gerenciar cookies.

As funções a seguir permitem que um aplicativo crie ou recupere cookies no banco de dados de cookie.

Função Descrição
InternetGetCookie Recupera cookies para a URL especificada e todas as URLs pai.
InternetSetCookie Define um cookie na URL especificada.

 

Observe que essas funções não exigem uma chamada para InternetOpen. Os cookies que têm uma data de validade são armazenados na conta de usuários locais em Usuários\"nome de usuário"\AppData\Roaming\Microsoft\Windows\Cookies e no diretório Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low para aplicativos em execução com baixos privilégios. Os cookies que não têm uma data de validade são armazenados na memória e estão disponíveis apenas para o processo no qual foram criados.

Conforme observado no tópico Cookies HTTP , a função InternetGetCookie não retorna cookies que foram marcados pelo servidor como não script com o atributo "HttpOnly" no cabeçalho Set-Cookie.

InternetGetCookie retorna os cookies para a URL especificada e todas as URLs pai.

O exemplo a seguir demonstra uma chamada para 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 é usado para definir um cookie na URL especificada. InternetSetCookie pode criar cookies persistentes e de sessão.

Os cookies persistentes têm uma data de validade. Esses cookies são armazenados na conta de usuários locais em Usuários\"nome de usuário"\AppData\Roaming\Microsoft\Windows\Cookies e no diretório Usuários\"nome de usuário"\AppData\Roaming\Microsoft\Windows\Cookies\Low para aplicativos em execução com baixos privilégios.

Os cookies de sessão são armazenados na memória e só podem ser acessados pelo processo que os criou.

Os dados do cookie devem estar no formato:

NAME=VALUE

Para a data de validade, o formato deve ser:

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

DAY é a abreviação de três letras para o dia da semana, DD é o dia do mês, MMM é a abreviação de três letras para o mês, YYYY é o ano, e HH:MM:SS é a hora do dia em tempo militar.

O exemplo a seguir demonstra duas chamadas para InternetSetCookie. A primeira chamada cria um cookie de sessão e a segunda cria um cookie persistente.

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

Observação

O WinINet não dá suporte a implementações de servidor. Além disso, ele não deve ser usado de um serviço. Para implementações ou serviços de servidor, use Os Serviços HTTP do Microsoft Windows (WinHTTP).