Arquivo da tag: armazenamento

Mantendo o estado em páginas ASP.NET

Protocolo HTTP é um protocolo que não armazena informações entre suas requisições e resposta (stateless).

Não há implementações no protocolo HTTP que requisite que o browser identifique a si mesmo em cada requisição. Também não há nenhuma conexão estabelecida entre o browser e o servidor que persista entre uma página e a próxima, ou entre requisições para a mesma página, ou seja, o servidor envia os dados requisitados pelo cliente e não armazena nenhuma informação de estado. Se o cliente solicita a mesma informação, mesmo em um período de tempo pequeno, o servidor envia novamente sem nenhum critério.

Em qualquer desenvolvimento de sistemas Web pode ser aplicado técnicas de persistência de informações entre as requisições do usuário, como session e cookie. Além desta duas formas, no ASP.NET é possível usar um novo recurso chamado de VIEWSTATE.

Session

  • São informações armazenadas no servidor web para cada usuário de um determinado site;
  • Cada usuário possui suas próprias variáveis de sessão;
  • São destruídas ao fechar o navegador, ou no seu timeout, ou ainda quando solicitado pela aplicação;
  • As variáveis de sessões são globais dentro da sessão do usuário (qualquer página do servidor Web pode acessá-las).

Armazenando

Session.Add("INFORMACAO","Valor a ser armazenado");

Recuperando

if (Session["INFORMACAO"] != null) //testando a existência da session
    string x = Session["INFORMACAO"].ToString();

É importante testar a existência da session antes de tentar recuperar seu valor. Caso ela não exista, é disparado um erro ao tentar recuperar o valor.

Destruindo

Session.Remove("INFORMACAO");

Cookie

  • Trata-se de um pequeno arquivo de texto que é armazenado na máquina do usuário;
  • Cada site possui suas próprias cookies no computador do usuário;
  • Usado, por exemplo, em sites de comércio eletrônico, para exibir as  preferências e características do usuário;
  • São destruídas ao fechar o navegador, ou quando seu tempo de vida expira, ou ainda quando solicitado pela aplicação;
  • Pode identificar o usuário mesmo dias depois de seu acesso a página;
  • O grande problema dos cookies é que o usuário simplesmente pode desabilitar este recurso em seu navegador.

Armazenando

HttpCookie cookie = new HttpCookie("INFORMACAO");
cookie.Value = "Valor a ser armazenado";

//Envia a cookie ao cliente
Response.Cookies.Add(cookie);

É possível manipular o tempo de vida da cookie no cliente. No exemplo abaixo a cookie tem um tempo de vida de 7 dias.

cookie.Expires = DateTime.Now.AddDays(7);

//Envia a cookie ao cliente
Response.Cookies.Add(cookie);

Recuperando

if (Request.Cookies["INFORMACAO"] != null)
{
    string x = Request.Cookies["INFORMACAO"].Value;
}

É importante testar a existência da cookie antes de tentar recuperar seu valor. Caso ela não exista, é disparado um erro ao tentar recuperar o valor.

Destruindo
Para destruir a cookie é necessário definir um tempo de vida menor que o atual. Depois é só enviá-la ao cliente.

if (Request.Cookies["INFORMACAO"] != null)
{
    HttpCookie cookie = Request.Cookies["INFORMACAO"];
    cookie.Expires = DateTime.Now.AddDays(-1);

    //Envia a cookie ao cliente
    Response.Cookies.Add(cookie);
}

Para confirmar a operação criação/definição de valores e destruição da cookie é requerido seu envio ao browser cliente. Observe nos exemplos acima o uso do Response.Cookie.Add para enviá-la ao cliente.

ViewState

  • Mantêm automaticamente os valores de controles de servidor entre um postback e outro;
  • Internamente funciona como um campo oculto (hidden) um pouco mais sofisticado (__VIEWSTATE);
  • O ViewState é mantido somente na página, ao sair da página ele é perdido;
  • Ao rodar uma aplicação ASP.NET sem qualquer controle verá que é criado um campo oculto para o armazenamento do ViewState;
  • Os dados não são exibidos em texto plano, por questões de segurança;
  •  Pode-se ainda adicionar manualmente valores a um ViewState.

Armazenando

ViewState.Add("INFORMACAO","Valor a ser armazenado");

Recuperando

if (ViewState["INFORMACAO"] != null) //testando a existência do viewstate
    string x = ViewState["INFORMACAO"].ToString();

É importante testar a existência do viewstate antes de tentar recuperar seu valor. Caso ele não exista, é disparado um erro ao tentar recuperar o valor.

Destruindo

ViewState.Remove("INFORMACAO");

Até o próximo post.