Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Sob o protocolo http, um servidor ou um script usa cookies para manter informações de estado na estação de trabalho cliente. As funções WinINet implementaram um banco de dados de cookies persistente para esta finalidade. Podem ser utilizados para definir e aceder aos cookies a partir da base de dados de cookies. Para obter mais informações, consulte Cookies HTTP.
O InternetSetCookie e as funções de InternetGetCookie podem ser usadas para gerir cookies.
Utilização de funções de cookies
As seguintes funções permitem que uma aplicação crie ou recupere cookies na base de dados de cookies.
| Função | Descrição |
|---|---|
| InternetGetCookie | Recupera cookies do URL especificado e de todos os seus URLs progenitores. |
| InternetSetCookie | Define um cookie no URL especificado. |
Observe que essas funções não exigem uma chamada para InternetOpen. Os cookies com uma data de expiração são armazenados na conta de usuários locais em Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies directory e no diretório Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low para aplicativos executados sob privilégios baixos. 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 em que foram criados.
Conforme observado no tópico de cookies HTTP, a funçãoInternetGetCookie não retorna cookies que foram marcados pelo servidor como não programáveis com o atributo "HttpOnly" no cabeçalho Set-Cookie.
Obter um 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;
}
Definir um cookie
InternetSetCookie é usado para definir um cookie no URL especificado. 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 no diretório Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies e no diretório Users\"username"\AppData\Roaming\Microsoft\Windows\Cookies\Low para aplicativos executados sob privilégios baixos.
Os cookies de sessão são armazenados na memória e só podem ser acedidos pelo processo que os criou.
Os dados para o cookie devem estar no formato:
NAME=VALUE
Para a data de validade, o formato deve ser:
DAY, DD-MMM-YYYY HH:MM:SS GMT
DIA é a abreviatura de três letras para o dia da semana, DD é o dia do mês, MMM é a abreviatura de três letras para o mês, AAAA é o ano e HH:MM:SS é a hora do dia no 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
WinINet não suporta implementações de servidor. Além disso, não deve ser usado num serviço. Para implementações ou serviços de servidor, use Microsoft Windows HTTP Services (WinHTTP).