Prazer em desenvolver software
Convencionalmente ao desenvolver aplicações para web é necessário guardar o estado do cliente que esta acessando uma determinada página, por exemplo, um sistema que oferece um carrinho de compra deve estar preparado para guardar as informações do usuário como CEP e Nome à medida que o cliente navegue por outras página, dai então a importância da utilização do Gerenciamento de estado do ASP.NET.
A plataforma web é baseada no protocolo HTTP que impossibilita a persistência de estado de maneira nativa, isso significa que não é possível saber se uma única instância do browser esta fazendo uma solicitação repetitiva, ou se essas solicitações são do mesmo cliente, devida essa característica o ASP.NET fornece recursos para a persistência de estado.
Gerenciamento de estado (State Management) é o mecanismo que permite que informações(dados) sejam preservados, a medida que o cliente realize solicitações ao servidor.
Para entender esse processo é necessário dividi-lo em duas partes a primeira sendo aquela que acontece do lado do cliente(client-side) a qual será abordada nesse artigo e a segunda do lado do servidor(server-side) que será abordado num futuro artigo.
Recursos do lado do cliente
Abaixo são listados os recursos oferecidos pelo ASP.NET para realizar a persistência de estado nas páginas .aspx do lado do cliente, iremos abordar todos não esquecendo de mostrar suas vantagens e desvantagens, bem como, quais os cenários ideais para utilizar cada recurso.
ViewState
Control state
Hidden fields
Cookies
Query strings
ViewState
Esse recurso permite que o estado dos dados existentes nos controles de uma página, sejam mantidos após o HTTP POST, considerado o recurso mais completo porque possui portabilidade a criptografia, Built-In Types, Dictionary que aceita qualquer objeto com tipo não se limitando a o tipo string.
Implementação
// escrever um ViewState
ViewState.Add("DevBrasil", DateTime.Now);
// ler um ViewState
DateTime data = (DateTime)ViewState["DevBrasil"];
Cenário
Utilize quando ocorrer a necessidade de guardar os valores dos controles através de requisições HTTP POST para uma única página, o ViewState trabalha apenas com requisição HTTP POST, se for realizada uma requisição HTTP GET que é efetivada por exemplo quando é utilizado o HyperLink Control aonde existe um redirecionamento para outra página esse processo irá perder o ViewState.
Vantagem
É gerado um campo do tipo hiddem chamado __VIEWSTATE que tem seu valor criptografado dificultando pessoas mal intencionadas de obter alguma informação sigilosa.
Desvantagem
Deve-se tomar cuidado na utilização com controles complexos como GridView, dependendo da quantidade de dados que será exibida no controle o ViewState pode chegar a representar mais da metade do tamanho em KB da página, o que fará com que a página demore para ser carregada. Teoricamente quanto mais existir controles que gerem ViewState maior será a página, porém a criticidade existe realmente com controles complexos.
Control state
O propósito desse recurso é possibilitar a persistência de dados para os controles que não fazem parte da gestão de gerenciamento feita pelo ViewState, isso significa que alguns controles o ViewState não tem acesso, por exemplo controles criados pelo desenvolvedor (Web Custom Controls).
Implementação
Para não estender o artigo conceitualmente quando é criado um WebCustomControl esse controle não é gerenciado pelo ViewState então devesse implementar o Control State que implementará o ViewState a esse controle.
Cenário
Convém utilizar quando é criado um Web Custom Control, ou seja, quando é criado um controle personalizado.
Vantagem
Permite gerenciar os estados dos controles que não estão sobre a "jurisdição" do ViewSate.
Desvantagem
A implementação é complexa.
Hidden fields
O controle Hidden Field tem o papel de esconder dados dentro do html que não são exibidos para o cliente sendo que a persistência desses dados é válida apenas para uma única página a qual o controle Hidden Field foi adicionado.
Implementação
// escrever um HiddenField
<asp:HiddenField ID="hdDevBrasil" runat="server" />
// ler um HiddenField
hdDevBrasil.Value = "1";
Cenário
Utilize quando existir a necessidade de esconder algum pequeno valor que se resume em alguns caracteres e que não seja sigiloso, esse valor será mantido dentro do corpo do html e não será visível ao usuário.
Vantagem
Consiste de uma maneira simples de gerar o mínimo de html tendo como questão não prioritária a segurança desses dados.
Desvantagem
Não possui portabilidade para objetos, será sempre armazenado tendo seu tipo como string, além de não fornecer recurso nativo para criptografia.
Cookies
O cookie é um recurso que armazena valores em texto no cliente, sendo que o cookie pode ser criado na memória para uma sessão ou mantido na máquina do cliente, fazendo com que se o usuário desligar o computador a informação persista, o Cookie pode ser visualizado através do cabeçalho http de uma página html.
Implementação
// setar o valor para um cookie
Response.Cookies[“corDeFundo”].Value = “preto”;
// recuperar o valor de um cookie
Request.Cookies[“corDeFundo”].Value.ToString();
Cenário
Utilizasse geralmente quando existe a necessidade identificar um usuário que esta acessando inúmeras páginas de um determinado Web Site.
Vantagem
Permite que a página personalizada para um determinado cliente seja carregada rapidamente porque as informações já estão armazenadas na máquina do cliente.
Desvantagem
O usuário pode configurar seu browser para não permitir utilização de cookie, não é possível armazenar dados sigilosos como cartão de crédito.
Query String
Query String é um recurso que possibilita a passagem de parâmetros entre url diferentes, através da própria url.
Implementação
// escrever uma querystring
string url = “DevBrasil/Membros.aspx?nome=” + TextBox1.Text + “&email=” + TextBox2.Text;
Response.Redirect(url);
// recuperar o valor de uma querystring
TextBox1.Text = Request.QueryString[“nome”];
Cenário
Quando é necessário passar parâmetro de uma página para outra, por exemplo existe uma entidade Carro e uma entidade ServicoCarro, bem como, existe uma página Carro.aspx e outra ServicoCarro.aspx, é necessário consultar um serviço para um determinado carro o método recebe como parâmetro o idCarro então a página Carro.aspx chamar a página ServicoCarro.aspx passara o parâmetro id, a url ficara ServicoCarro.aspx?IdCarro=1
Vantagem
É um recurso que permitir passar dados relevantes de uma página para outra sem armazenar dados no cliente.
Desvantagem
Não pode armazenar dados sigilosos, se a url não for tratada usuário mal intencionado pode inserir manualmente dados maliciosos e causas problemas na aplicação.
Nesse artigo, foi demonstrado os recursos existentes do ASP.NET para gerenciamento de estados do lado do cliente e suas implementações.
Para saber mais:
Aprofunde seus conhecimentos sobre este tema na comunidade ASP.NET
Comentar
Muito bom! Mas eu fiquei com uma dúvida se estou fazendo errado em usar Session o.O! Eu uso Session para quase todas as passagens das minhas paginas, há alguma restrição?
Creio que uma melhor solução também seria usar o FormsAuthentication...
Eu costumo usar Session, nos meus projetos.
Boa Leandro muito bom o artigo....
Muito bom, Leandro! ASP.Net na Veia
© 2019 Criado por Ramon Durães.
Ativado por
Você precisa ser um membro de DevBrasil para adicionar comentários!
Entrar em DevBrasil