Gerenciamento de sessão ASP.NET [Exemplo]
⚡ Resumo Inteligente
O gerenciamento de sessão do ASP.NET permite que um aplicativo HTTP sem estado mantenha os dados do usuário entre as requisições. Este artigo explica o ViewState, o objeto Session para armazenar pares de chave-valor, apresenta um exemplo prático, os modos de estado da sessão, a configuração de tempo limite e as vantagens do estado da sessão.
Gerenciamento de sessão ASP.NET
O protocolo HTTP no qual todos os aplicativos da web funcionam é um protocolo sem estado. Por stateless, significa apenas que as informações não são retidas de uma solicitação para outra.
Por exemplo, se você tivesse uma página de login com 2 caixas de texto, uma para o nome e outra para a senha. Quando você clica no botão Login nessa página, o aplicativo precisa garantir que o nome de usuário e a senha sejam passados para a próxima página.
Em ASP.NET, isso é feito de várias maneiras. A primeira é por meio de um conceito chamado ViewState. É nele que o ASP.NET armazena automaticamente o conteúdo de todos os controles. Ele também garante que esse conteúdo seja passado para a próxima página. Isso é feito por meio de uma propriedade chamada ViewState.
Não é ideal para um desenvolvedor alterar alguma coisa no estado de visualização. Isso ocorre porque ele deve ser tratado apenas pelo ASP.Net.
Objeto de sessão ASP.NET
A outra maneira é usar um objeto chamado “Objeto de Sessão”. O objeto Session está disponível durante todo o ciclo de vida da aplicação. Você pode armazenar qualquer número de pares de valores-chave no objeto Session. Portanto, em qualquer página, você pode armazenar um valor no objeto Session por meio da linha de código abaixo.
Session["Key"] = value
Isso armazena o valor em um objeto Session, e a parte 'key' é usada para dar um nome ao valor. Isso permite que o valor seja recuperado posteriormente. Para recuperar um valor, basta executar a instrução abaixo.
Session["Key"]
Exemplo de objeto de sessão ASP.NET
Em nosso exemplo, usaremos o objeto Session para armazenar o nome inserido no campo de texto "nome" da página. Em seguida, recuperaremos esse valor e o exibiremos na página. Adicione o código abaixo ao arquivo Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Explicação:-
- A primeira linha de código pega o valor do controle de caixa de texto Nome e o armazena no objeto Session. Ao especificar o código Session["Name"], estamos dando à propriedade o nome "Name". Ao especificar um nome para a propriedade, fica mais fácil recuperá-la posteriormente.
- A próxima linha de código recupera o valor armazenado do objeto Session. Em seguida, ele grava esse valor por meio do método 'Response.Write' de volta ao cliente.
- Por fim, tornamos todos os controles do formulário invisíveis. Caso contrário, todos os controles, juntamente com os valores de resposta, serão exibidos simultaneamente.
Após efetuar as alterações acima, você verá a seguinte saída.
Saída:
Na saída, você pode ver que o valor da sessão de nome foi recuperado e exibido no navegador.
Modos de estado de sessão do ASP.NET
O ASP.NET pode armazenar dados de sessão em vários locais, chamados modos de estado de sessão. O modo escolhido afeta o desempenho, a escalabilidade e se os dados persistem após a reinicialização do aplicativo. A tabela abaixo compara esses modos:
| Moda | Onde o estado é armazenado | Melhor para |
|---|---|---|
| InProc | Na memória do servidor web (padrão) | Aplicativos de servidor único; os mais rápidos, mas perdem a eficácia ao reiniciar. |
| Servidor de Estado | Um processo de serviço de estado ASP.NET separado | Fazendas web; sobrevive a reinicializações de aplicativos. |
| Servidor SQL | Um banco de dados SQL Server | Fazendas de servidores web que necessitam de um estado durável e escalável. |
| Molduras por Medida | Um provedor personalizado que você implementa. | Lojas especializadas como a Redis |
| Off | Estado da sessão desativado | Aplicativos que não precisam de sessões |
O InProc é o padrão e o mais rápido, mas para implantações com balanceamento de carga, o StateServer ou o SQLServer mantêm as sessões disponíveis em vários servidores.
Como configurar o tempo limite da sessão no ASP.NET
Uma sessão não dura para sempre; ela expira após um período de inatividade. Você pode definir esse tempo limite no arquivo web.config usando o elemento sessionState, onde o valor do tempo limite é em minutos:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Você também pode configurá-lo no código com Session.Timeout = 30;O tempo limite padrão é de 20 minutos. Escolher um tempo limite menor libera memória do servidor mais rapidamente e melhora a segurança, enquanto um tempo limite maior mantém os usuários conectados por mais tempo.
Vantagens e desvantagens do estado de sessão
O estado da sessão é conveniente, mas tem desvantagens que você deve ponderar antes de depender muito dele.
Vantagens:
- Simples de usar para armazenar dados por usuário, como em uma loja.ping carrinho ou detalhes de login.
- Pode armazenar objetos complexos, não apenas strings.
- Os dados são armazenados no servidor, sendo, portanto, mais seguros do que o armazenamento no lado do cliente.
Desvantagens:
- O modo InProc consome memória do servidor e não é escalável em um cluster web.
- Os dados da sessão são perdidos quando a sessão expira ou o aplicativo é reiniciado (no modo InProc).
- Armazenar grandes quantidades de dados por usuário pode prejudicar o desempenho sob carga elevada.



