C# e Cookies

 

Cookies permitem você armazenar pequenas quantidades de dados no computador do usuário. Eles ocupam pouco espaço no disco do usuário e muitas vezes são úteis para se armazenas informações não essências, como as preferências do usuário.

Dica

Armazene nos cookies informações que você espera perder. O usuário pode apagar os cookies a qualquer momento, além de alguns usuários desabilitarem esta funcionalidade. O ASP.NET permite você manipular cookies de forma muito fácil com a coleção Cookies dos objetos Request e Response. As Listagens 1 e 2 são duas páginas que irão ler e escrever nos cookies que você informar.

 

Listagem 1.  WriteCookies.aspx: Escrevendo em um cookie aleatório

<%@ language="C#" %>

<script runat="server">

void WriteClicked(Object Sender, EventArgs e)

{

//Cria um novo cookie, passando o nome no construtor

HttpCookie cookie = new HttpCookie(NameField.Text);

 

       //Determina o valor o cookie

cookie.Value = ValueField.Text;

 

//Configura o cookie para expirar em 1 minuto

DateTime dtNow = DateTime.Now;

TimeSpan tsMinute = new TimeSpan(0, 0, 1, 0);

cookie.Expires = dtNow + tsMinute;

 

//Adiciona o cookie

Response.Cookies.Add(cookie);

 

Response.Write("Cookie written. <br><hr>");

}

</script>

<html>

<body>

<h3>Use the button below to write cookies to your browser </h3>

The cookies will expire in one minute.

<form runat="server">

Cookie Name <asp:textbox id="NameField" runat="server"/><br>

Cookie Value <asp:textbox id="ValueField" runat="server"/><br>

<asp:button text="WriteCookie" onclick="WriteClicked" runat="server" /><br>

</form>

<a href="readcookies.aspx">Read the cookies</a>

</body>

</html>

 

Listagem 2.  ReadCoookies.aspx: Lendo os cookies criados no exemplo WriteCookies

<%@ language="C#" %>

<script runat="server">

void ReadClicked(Object Sender, EventArgs e)

{

//Pega o nome do que cookie que o usuário informou

String strCookieName = NameField.Text;

 

//Captura o cookie

HttpCookie cookie = Request.Cookies[strCookieName];

 

//Certifica-se que o cookie existe

if (null == cookie) {

Response.Write("Cookie not found. <br><hr>");

}

else {

//Escreve o valor do cookie

String strCookieValue = cookie.Value.ToString();

Response.Write("The " + strCookieName + " cookie contains: <b>"

+ strCookieValue + "</b><br><hr>");

}

}

</script>

<html>

<body>

Use the button below to read a cookie<br>

<form runat="server">

Cookie Name <asp:textbox id="NameField" runat="server" />

<asp:button text="ReadCookie" onclick="ReadClicked" runat="server" />

</form>

<a href="writecookies.aspx">Write Cookies</a>

</body>

</html>

 

Para criar um cookie, crie um novo objeto HttpCookie (Linha 6 da Listagem 1), atribua uma string à sua propriedade Value (Linha 9), e então chame o método Add() do objeto Response.Cookies (Linha 17). Você pode também determinar o tempo de expiração de um cookie configurando a propriedade Expires para um valor de DateTime (Linha 14).

 O arquivo ReadCookies.aspx da Listagem 2 mostra da mesma forma como é fácil para ler cookies, utilizando a coleção Request.Cookies (Linha 9), que é indexada pelo nome do cookie.

 Cookies podem armazenas apenas strings, então se você precisa armazenar um tipo de dado mais complexo, ele deve ser convertido para string. Uma forma possível de se armazenar estruturas de dados complexas é transformando a estrutura em um XML e então convertê-la de volta quando o cookie for lido.

 Você pode armazenar diversas strings em um cookie, tratando cada cookie como uma coleção de objetos. Por exemplo, o código seguinte iria funcionar perfeitamente:

 

HttpCookie cookie = new HttpCookie("UserFavorites");

cookie["FavoriteColor"] = "blue";

cookie["FavoriteFlavor"] = "chocolate";

cookie["FavoriteDrink"] = "coffee";

 

A classe HttpCookie possui algumas propriedades avançadas, listadas na Tabela 1.

 

Propriedade

Descrição

Domain

Configura o dominío ao qual pertence este cookie. Se utilizado, ele restringe o acesso ao cookie a servidores do domínio espeficicado, como mycompany.com.

Path

 

Configura o caminho ao qual o pertence este cookie. Se utilizado, restringe o acesso ao cookie a páginas localizadas no caminho especificado.

Secure

 

Configura a flag que determina se o cookie deve ser transmitido de forma segura para o browser do usuário, utilizando o protocolo HTTPS. Seu servidor web deve ter HTTPS configurado para que esta opção funcione.

HasKeys

Informe se o cookie é composto de uma coleção de strings.

Table 1.  Advanced Properties of the HttpCookie Class