quinta-feira, 22 de maio de 2008

Utilizando cookies

Um cookie é formado por dados em forma de texto que acompanham as requisições e respostas entre navegadores e servidores web. O cookie contêm informações que a aplicação Web pode ler sempre que o usuário visita o site. Desta forma podemos armazenar, por exemplo preferências do usuário através do cookie.

Quando um usuário requisita uma página de um site, o site pode retornar além da página, cookies que são armazenados localmente. Mais tarde, se o usuário requisita uma página do mesmo site novamente, o navegador irá enviar os cookies daquele site juntamente com a requisição.

Os cookies são associados a sites e não a páginas e usuários. Então a medida que os usuários navegam podem ser armazenados cookies de sites que diferentes uns dos outros.

Limitações de cookies

A maioria dos navegadores suportam cookies de até 4096 bytes. Por este pequeno limite, cookies são usados para armazenar pequenas quantidades de dados.

Pode haver também limitações de quantidade de cookies que um site pode armazenar, sendo que a maioria dos navegadores impõem um limite de 20 cookies por site. Alguns navegadores limitam a 300 cookies armazenados na máquina

Outra limitação é que o cliente pode desabilitar cookies

Escrevendo cookies

O ASP.NET escreve cookies na resposta de uma requisição, o navegador que é responsável pela persistência dos dados no cliente. Quando criado um cookie, deve ser especificado um nome e valor. Cada cookie deve ter um nome único, para que possa ser recuperado posteriormente. É possível informar uma data de expiração do cookie, lembrando que o usuário pode limpar os cookies antes da expiração definida pelo nosso código.

Controlando o escopo do cookie

Os cookies podem ter um escopo limitado para diretórios dentro do domínio, utilizando subdomínios do site.

Determinando se o navegador suporta cookie

Uma forma de descobrir se o navegador suporta cookie é enviar um cookie para o usuário e posteriormente tentar lê-lo.

Prática

Vamos agora montar um exemplo que irá armazenar o usuário e data do último login do usuário no site, quando ele marca uma opção para isto. Para isso, crie um novo Web site e na página default.aspx adicione os seguintes controles e defina suas propriedades como abaixo:

  • Label

    • ID: lbUsuario

    • Text : Usuário

  • TextBox

    • ID : txtUsuario

  • Button

    • ID: btnEnviar

    • Text: Enviar

  • Label

    • ID: lbUltimoLogin

    • Text : vazio

Feito isto a parte visual da página deverá estar parecido com a Imagem 1:

Imagem 1 – Página Default.aspx com os controles configurados

Programa o evento click do botão btnEnviar e o Page Load conforme o Código 1:

public partial class _Default : System.Web.UI.Page
{
private const string cookieID = "informacoesUsuario";

protected void Page_Load(object sender, EventArgs e)
{

if (Request.Cookies[cookieID] != null)
{
HttpCookie cookieInformacoesUsuario = Request.Cookies[cookieID];
txtUsuario.Text = cookieInformacoesUsuario[
"usuario"];
AdicionaInfoUltimaVisita(cookieInformacoesUsuario);
}

}

private void AdicionaInfoUltimaVisita(HttpCookie cookieInformacoesUsuario)
{

if (Request.Cookies[cookieID] != null)
{
lbUltimoLogin.Text =
string.Format("Sua última visita foi em : {0}", cookieInformacoesUsuario.Values["ultimaVisita"]);
}

}

protected void btnEnviar_Click(object sender, EventArgs e)
{

HttpCookie cookieInformacoesUsuario = new HttpCookie(cookieID);
cookieInformacoesUsuario.Values[
"usuario"] = txtUsuario.Text;
cookieInformacoesUsuario.Values[
"ultimaVisita"] = DateTime.Now.ToString();
cookieInformacoesUsuario.Expires =
DateTime.Now.AddDays(10);
Response.Cookies.Add(cookieInformacoesUsuario);

AdicionaInfoUltimaVisita(cookieInformacoesUsuario);

}

}

Código 1 – Programando o click do BtnEnviar e o PageLoad

Execute o site, digite o usuário e clique em enviar. Feche o navegador, abra outro navegador e visite o mesmo endereço e veja o cookie em ação.

Referências
http://msdn.microsoft.com/en-us/library/ms178194.aspx