Conceitos e Criação do Projeto: Trabalhando com Cookies

Neste artigo veremos os conceitos sobre cookies e o início da criação de um exemplo prático com eles.

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.

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.

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.

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.

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.

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.

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.

Artigos relacionados