Olá pessoal, neste artigo veremos os conceitos e a criação de um exemplo prático do uso dos Cookies.

Os Cookies são, assim como o ViewState, uma forma de garantir a persistência dos dados e a manutenção do estado. Ele nada mais é do que um pequeno arquivo de texto armazenado na máquina do usuário.

Sua maior vantagem é que você pode identificar o usuário mesmo dias depois de seu acesso a página. Este recurso é extremamente utilizado em sites de comércio eletrônico, o famoso e-commerce, para exibir as preferências de cada usuário, como os últimos produtos pesquisados, por exemplo, ou mesmo para informar ao usuário a data de sua última visita ao site.

Em contrapartida, sua maior desvantagem é que o usuário pode desabilitar os cookies em seu navegador (o que hoje em dia muitos fazem).

Explicado os conceitos, vamos à prática. Crie uma nova aplicação do tipo Web Application, dando a ela o nome ExemploCookies e dê OK. Na Default.aspx adicione três Labels, dois Textboxes, três Buttons, um LinkButton e um ListBox, conforme a Figura 1.

Layout
Figura 1. Layout

Usei os seguintes ID’s (cito os mais relevantes): txtNome, txtValor, btnGravar, btnRecuperar, btnGravarItens, lnkAtualizar, lstCookies com a propriedade AutoPostBack como True (importante alterá-la, pois o padrão é False) e lblValorCookie com a propriedade Text vazia.

A ideia é a seguinte: gravaremos alguns cookies, recuperá-los manualmente, atualizar o ListBox com os cookies que acabamos de gravar e ainda gravar vários cookies.

Vamos começar criando o método para Gravar os cookies. Vá à página de códigos e crie o método a seguir (com comentários explicativos):

private void Gravar()
{
    try
    {
      //Se meu browser requisitar cookies
      if (Request.Browser.Cookies)
      {
        //Instancio a classe Cookie passando como parâmetro o txtNome
        HttpCookie objCookie = new HttpCookie(this.txtNome.Text);
  
        //O value do meu objeto instanciado recebe o txtValor
        objCookie.Value = this.txtValor.Text;
  
        //Defino quanto tempo meu cookie levará para se expirar
        objCookie.Expires = DateTime.Now.AddMinutes(5);
  
         //Uso o Response pra gravar meu cookie
         Response.Cookies.Add(objCookie);
       }
     }
     catch (Exception ex)
     {
        throw new Exception(ex.Message);
     }
}

Não se esqueça de chamar o método no botão Gravar. Além disso, crie o método para o botão Recuperar e faça o mesmo chamando no evento Click do btnRecuperar:

private void Recuperar()
{
  try
  {
    //Crio o cookie passando o txtNome como valor, por meio do Request
    HttpCookie objCookie = Request.Cookies[txtNome.Text];
  
    //Verifico se meu cookie está diferente de nulo, 
    //se estiver atribuo o valor do cookie ao txtValor
    if (objCookie != null)
    {
      this.txtValor.Text = objCookie.Value;
     }
      else
      {
         this.txtNome.Text = "Erro, o Cookie está vazio!";
       }
    }
    catch (Exception ex)
    {
      throw new Exception(ex.Message);
    }
}

Em seguida crie o método para Atualizar os cookies. Será um laço que percorrerá todos os cookies existentes e os exibirá em nosso ListBox (parecido com o exemplo do artigo sobre QueryString):

private void Atualizar()
{
  try
  {
    //Declaro uma variável do tipo string, que irá armazenar os valores
    string totalCookies;
 
    //Limpo o ListBox
    this.lstCookies.Items.Clear();
 
     //Faço um laço para percorrer os valores(keys) dos cookies
     foreach (string objString in Request.Cookies.Keys)
     {
       //Minha variável recebe a contagem dos valores dos cookies, 
       //por meio do método Count
       totalCookies = Request.Cookies[objString].Values.Keys.Count.ToString();
 
       //Adiciono os valores em meu ListBox
       lstCookies.Items.Add(new ListItem(objString + "(" + totalCookies + ")", 
         Request.Cookies[objString].Value));
      }
     }
     catch (Exception ex)
     {
       throw new Exception(ex.Message);
      }
}

Não se esqueça de chamá-lo no evento Click do LinkButton.

Agora crie o método que irá Gravar vários itens (esse método grava vários valores dentro do mesmo cookie):

private void GravarVariosItens()
{
  try
  {
    //Instancio a classe Cookie passando como parâmetro o nome do meu cookie
    HttpCookie objCookie = new HttpCookie("nomeCookie");
 
     //Adiciono os valores ao meu Cookie
     objCookie["Valor1"] = " Valor1";
     objCookie["Valor2"] = " Valor2";
     objCookie["Valor3"] = " Valor3";
     objCookie["Valor4"] = " Valor4";
     objCookie["Valor5"] = " Valor5";
 
     //Defino quanto tempo meu cookie levará para se expirar
     objCookie.Expires = DateTime.Now.AddDays(1);
               
     //Uso o Response pra gravar meu cookie
     Response.Cookies.Add(objCookie);
    }
    catch (Exception ex)
    {
       throw new Exception(ex.Message);
     }
}

Finalizando, vá ao modo Design de sua página, clique no ListBox, e nos eventos dele e dê dois cliques no evento SelectedIndexChanged. Nele, faça o seguinte:

protected void lstCookies_SelectedIndexChanged(object sender, EventArgs e)
 {
    //Se o valor do ListBox for diferente de nulo, o passo para o lblValorCookie
    if (lstCookies.SelectedItem.Value != string.Empty)
    {
      lblValorCookie.Text = lstCookies.SelectedItem.Value;
    }
}

Desta forma a cada valor selecionado no ListBox, o mesmo é automaticamente passado ao meu Label.

Códigos prontos, aperte F5 para rodar a aplicação e clique em OK para habilitar ao Web.Config a compilação.

Faça alguns testes, digite um nome qualquer e um valor e clique em Gravar. Depois clique em Atualizar e selecione o valor que aparece no ListBox, como mostra a Figura 2.

Selecionando valor
Figura 2. Selecionando valor

Perceba que ele armazenou o valor, então agora digite mais alguns nomes e valores. Em seguida clique no botão Atualizar e navegue pelos Cookies, como mostra a Figura 3.

Botão atualizar
Figura 3. Botão atualizar

Vamos fazer mais um teste, dessa vez só digite o nome que já foi gravado e clicar em Recuperar, como mostra a Figura 4.

Botão recuperar
Figura 4. Botão recuperar

Agora digite um nome e um valor qualquer e clique no botão Gravar Vários Itens. Atualize o ListBox e clique no valor que você acabou de gravar, como mostra a Figura 5.

Atualizando o ListBox
Figura 5. Atualizando o ListBox

Perceba que ele exibe vários valores (inclusive o número de valores no ListBox, entre parênteses). Você pode também fazer o teste apagando os cookies de seu browser e em seguida clique no botão Recuperar, como mostra a Figura 6.

Apagando os cookies
Figura 6. Apagando os cookies

Ele já exibe a mensagem que configuramos no else do método Recuperar.

Assim vimos diversas formas de trabalhar com cookies.