Visão Geral sobre o Gerenciamento de Estado do ASP.NET
Uma nova instância da classe da página Web é criada sempre que a página for lançada para o servidor.Em programação Web tradicional, isso normalmente significa que todas as informações associadas com a página e os controles na página seriam perdidos com cada processamento.Por exemplo, se um usuário inserir informações em um caixa de texto, essas informações poderiam ser perdidas no processamento do navegador ou cliente dispositivo para o servidor.
Para superar essa limitação inerente da programação tradicional da Web, o ASP.NET inclui várias opções que ajudam a preservar dados em uma base por página e todo o aplicativo continuamente.Esses recursos são:
Estado de exibição
Estado de controle
Campos ocultos
Cookies
Query Strings(String de consulta da url)
Application State (Estado do Aplicativo)
Session State (Estado da sessão)
Propriedades de Perfil
Estado de exibição, estado do controle, os campos ocultos, cookies e strings de consulta envolvem armazenar dados no cliente de várias maneiras.No entanto, o estado do aplicativo, estado de sessão e as propriedades do perfil armazenam dados na memória no servidor.Cada opção tem diferentes vantagens e desvantagens, dependendo do cenário.
Opções de Gerenciamento de Estado Baseado no Cliente
As seções a seguir descrevem as opções de gerenciamento de estado que envolvem armazenar informações na página ou no computador cliente.Para essas opções, nenhuma informação é mantida no servidor entre idas.
O estado de exibição
A propriedade ViewState fornece um objeto de dicionário para retenção dos valores entre várias solicitações para a mesma página.Esse é o método padrão que a página usa para manter páginas e valores de controle de propriedades Página entre idas.
Quando a página é processada, o estado atual da página e controles é feito em hash em uma string e salvo na página como um campo oculto, ou vários campos ocultos se a quantidade de dados armazenados na propriedade ViewState exceder o valor especificado na propriedade MaxPageStateFieldLength.Quando a página é colocada de volta para o servidor, a página analisa a sequência do estado de exibição na inicialização da página e restaura informações de propriedade na página.
Você pode armazenar valores em estado de exibição também.Para obter mais informações sobre o uso de View estado, consulte Visão geral do estado de exibição do ASP.NET. Para obter recomendações sobre quando você deve usar estado de exibição, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET.
Estado de controle
Às vezes você precisa armazenar dados de estado de controle para que um controle funcione corretamente.Por exemplo, se você escreveu um controle personalizado que tem diversas guias que mostram informações diferentes, para que o controle funcione como esperado, de alguma forma o controle precisa saber qual guia está selecionada entre viagens de ida e volta.A propriedade ViewState pode ser usada para essa finalidade, mas o estado de exibição pode ser desativado em nível de página por desenvolvedores, efetivamente quebrando o seu controle.Para resolver isso, a estrutura de página ASP.NET expõe um novo recurso no ASP.NET 2.0, chamado estado de controle.
A propriedade ControlState permite a você persistir as informações da propriedade que são específicas para um controle e não podem ser desativadas, como a propriedade ViewState.
Os campos ocultos
O ASP.NET permite que você armazene informações em um controle HiddenField, que processa como um campo oculto padrão HTML.Um campo oculto não processa visivelmente no navegador, mas você pode definir suas propriedades assim como faria com um controle padrão.Quando uma página é enviada para o servidor, o conteúdo de uma campo oculto é enviado na coleção de formulário HTTP junto com os valores de outros controles.Um campo oculto atua como um repositório de quaisquer informações específicas da página que você deseja armazenar diretamente na página.
Observação de segurança: |
---|
É fácil para um usuário mal-intencionado ver e modificar o conteúdo de um campo oculto.Não armazene as informações em um campo oculto que seja sensível ou que o seu aplicativo se baseie para funcionar corretamente.Para obter mais informações, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET. |
Um controle HiddenField armazena uma única variável em sua propriedade Value e deve ser explicitamente adicionado à página.Para obter mais informações, consulte Visão geral do controle de Servidor de Web HiddenField.
Para que valores de campos ocultos estejam disponíveis durante processamento de página, você deve enviar a página usando um comando HTTP POST.Se você usar campos ocultos e uma página é processada em resposta a um link ou um comando GET HTTP, os campos ocultos não estarão disponíveis.Para obter recomendações de uso, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET.
Cookies
Um cookie é uma pequena quantidade de dados que está armazenados, tanto em um arquivo de texto no sistema de arquivos do cliente quanto na memória em uma sessão do navegador do cliente.Ele contém informações específicas do site que o servidor envia para o cliente juntamente com a saída de página.Os cookies podem ser temporários (com datas e horários específicos de expiração) ou persistentes.
Você pode usar cookies para armazenar informações sobre um determinado cliente, sessão ou aplicativo.Os cookies são salvos no dispositivo do cliente, e quando o navegador solicita uma página, o cliente envia as informações no cookie junto com as informações de solicitação.O servidor pode ler o cookie e extrair o valor.Um uso típico é para armazenar um símbolo (talvez criptografado) indicando que o usuário já foi autenticado em seu aplicativo.
Observação de segurança: |
---|
O navegador pode enviar os dados de volta somente para o servidor que criou o cookie.Entretanto, os usuários mal-intencionados podem acessar cookies e ler seu conteúdo.É recomendável que você não armazene informações sigilosas, como um nome de usuário ou a senha, em um cookie.Em vez disso, armazene um token no cookie que identifica o usuário, e em seguida, use o símbolo para consultar as informações sigilosas no servidor. |
Para obter mais informações sobre como usar cookies, consulte Cookies e Recomendações sobre Gerenciamento de Estado do ASP.NET.
Strings de Consulta
Uma string de consulta é uma informação que será acrescentada ao final da URL da página.Uma string de consulta típica pode parecer com o exemplo a seguir:
https://www.contoso.com/listwidgets.aspx?category=basic&price=100
No caminho URL acima, a string de consulta começa com um ponto de interrogação (?) e inclui dois pares atributo/valor, uma chamada "Categoria" e o outra chamado "Preço."
Strings de consulta fornecem uma maneira simples, mas limitada de manter informações do estado.Por exemplo, elas são uma maneira fácil para passar informações de uma página para outra, como passar um número de produto de uma página para outra página onde ele será processado.No entanto, alguns navegadores e dispositivos clientes impõem um limite no comprimento da URL de 2083 caracteres.
Observação de segurança: |
---|
Informações que são passadas em uma string de consulta podem ser violadas por um usuário mal-intencionado.Não confie em strings de consulta para transmitir dados importantes ou confidenciais.Além disso, um usuário pode marcar um URL ou enviar o URL para outros usuários, assim, passando as informações juntamente com ele.Para obter mais informações, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET e Como: Proteger contra exploits script em um aplicativo Web da Web, Applying HTML Encoding to Strings. |
Para que valores de campos ocultos estejam disponíveis durante processamento de página, você deve enviar a página usando um comando HTTP GET.Ou seja, você não pode tirar proveito de uma string de consulta se uma página é processada em resposta a um comando HTTP POST.Para obter recomendações de uso, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET.
Opções de gerenciamento de estado baseado em servidor
O ASP.NET oferece uma variedade de maneiras para manter informações do estado no servidor, em vez de manter informações no cliente.Com o gerenciamento de estado baseado em servidor, você pode diminuir a quantidade de informações enviadas para o cliente para preservar o estado, mas ele pode usar recursos caros no servidor.As seções a seguir descrevem três recursos de gerenciamento de estado baseado em servidor: estado do aplicativo, estado de sessão e propriedades de analisar.
Application State (Estado do Aplicativo)
O ASP.NET permite que você salve valores usando o estado do aplicativo — que é uma instância de classe HttpApplicationState — para cada aplicativo ativo da Web.O estado do aplicativo é um mecanismo de armazenamento global acessível de todas as páginas de aplicativo da Web.Assim, o estado do aplicativo é útil para armazenar informações que precisam ser mantidas entre viagens de ida e volta ao servidor e solicitações de páginas.Para obter mais informações, consulte Visão geral do estado do aplicativo ASP.NET.
O estado do aplicativo é armazenado em um dicionário chave/valor que é criado durante cada solicitação para um determinado URL.Você pode adicionar suas informações específicas do aplicativo para essa estrutura para armazená-lo entre solicitações de página.
Depois que você adicionar suas informações específicas do aplicativo ao estado do aplicativo, o servidor o gerencia.Para obter recomendações de uso, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET.
Session State (Estado da sessão)
O ASP.NET permite que você salve valores usando o estado do aplicativo — que é uma instância de classe HttpSessionState — para cada aplicativo ativo da Web.Para obter uma visão geral, consulte Visão geral sobre Estado de sessão ASP.NET.
O estado da sessão é como o estado do aplicativo, exceto pelo fato de que ele é delimitado para a sessão atual do navegador.Se diferentes usuários estiverem usando o seu aplicativo, cada sessão de usuário terá um estado de sessão diferente.Além disso, se um usuário deixa o seu aplicativo e, em seguida, retorna posteriormente, a segunda sessão do usuário terá um estado de sessão diferente do primeiro.
O estado da sessão é estruturado como uma chave/valor dicionário para armazenar informações específicas da sessão que precisam ser mantidas entre viagens de ida e volta ao servidor e solicitações de páginas.Para obter mais informações, consulte Visão geral sobre Estado de sessão ASP.NET.
Você pode usar estado de sessão para realizar as seguintes tarefas:
Identificar exclusivamente o navegador ou solicitações do dispositivo cliente e mapeá-los para uma instância individual da sessão no servidor.
Armazenar dados específicas da sessão no servidor para uso nas várias solicitações do navegador ou dispositivo cliente dentro da mesma sessão.
Dispare eventos de gerenciamento apropriados para a sessão.Além disso, você pode escrever código aproveitando esses eventos do aplicativo.
Uma vez que você adicionar suas informações específicas do aplicativo para o estado de sessão, o servidor gerencia este objeto.Dependendo das opções que você especificar, informações da sessão podem ser armazenadas em cookies, em um servidor fora de processo, ou em um computador executando o Microsoft SQL Server.Para obter recomendações de uso, consulte Recomendações sobre Gerenciamento de Estado do ASP.NET.
Propriedades de Perfil
O ASP.NET oferece um recurso denominado propriedades de perfil, que permite que você armazene dados específicos de usuário.Este recurso se assemelha ao estado de sessão, exceto que os dados de perfil não são perdidos quando uma sessão de usuário expira.O recurso de propriedades de perfil utiliza um perfil ASP.NET que é armazenado em um formato persistente e associado a um usuário individual.O perfil ASP.NET permite-lhe gerenciar informações do usuário sem exigir que você crie e mantenha seu próprio banco de dados.Além disso, o perfil indisponibiliza a informações de usuário disponível usando uma API fortemente digitada que você pode acessar de qualquer lugar em seu aplicativo.Você pode armazenar objetos de qualquer tipo no perfil.O recurso de perfil ASP.NET fornece um sistema de armazenamento genérico que permite que você defina e mantenha praticamente qualquer tipo de dados enquanto ainda torna os dados disponíveis de uma maneira segura.
Para usar as propriedades de perfil, você deve configurar um provedor de perfil.O ASP.NET inclui uma classe SqlProfileProvider que permite que você armazene dados do perfil em um banco de dados SQL, mas você também pode criar sua própria classe provedor de perfil que armazena os dados do perfil em um formato personalizado e para um mecanismo personalizado de armazenamento, como um arquivo XML ou um serviço da Web.
Devido aos dados que são colocados em propriedades de perfil não estarem armazenados na memória de aplicativo, ela é preservada através de reinicializações de Serviços de Informações da Internet (IIS) e o operador de processo é reiniciado sem perder dados.Além disso, as propriedades de perfil podem ser persistentes entre vários processos, como em uma Web farm ou um ambiente Web.Para obter mais informações, consulte Visão geral sobre propriedades de perfil do ASP.NET.
Consulte também
Conceitos
Recomendações sobre Gerenciamento de Estado do ASP.NET
Visão Geral de Cookies do ASP.NET
Visão geral do estado de exibição do ASP.NET
Visão geral sobre Estado de sessão ASP.NET