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.

  • 🌐 HTTP sem estado: O HTTP não retém dados entre requisições, portanto o ASP.NET adiciona mecanismos para preservar o estado.
  • 🗂️ ViewState: O ViewState transporta automaticamente os valores de controle de uma página para a seguinte.
  • 🔑 Objeto de sessão: Session["Key"] armazena e recupera pares de chave-valor ao longo do ciclo de vida do aplicativo.
  • ⚙️ Modos de estado: O estado da sessão pode ser armazenado InProc, em um StateServer, no SQL Server ou em um armazenamento personalizado.
  • ⏱️ Tempo esgotado: O parâmetro `sessionState timeout` no arquivo `web.config` controla por quanto tempo uma sessão permanece ativa.

Tutorial de gerenciamento de sessão ASP.NET com exemplo

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.

Use o objeto de sessão

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:-

  1. 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.
  2. 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.
  3. 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:

Use o objeto de sessão

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.

Perguntas Frequentes

Sim. Os assistentes de IA podem gerar o código para armazenar e ler valores de sessão, sugerir o modo de estado correto e gravar as configurações do web.config. RevVeja o código gerado para confirmar se ele atende às suas necessidades de escalabilidade e segurança.

Sim. Ferramentas de revisão de código baseadas em IA podem sinalizar riscos como fixação de sessão, ausência de cookies exclusivos para HTTPS ou armazenamento de dados sensíveis na sessão. Considere as descobertas como uma orientação e confirme as correções com testes de segurança antes da implementação.

O estado da sessão armazena dados referentes à sessão de um único usuário, enquanto o estado da aplicação armazena dados compartilhados por todos os usuários da aplicação. Utilize a sessão para valores específicos de cada usuário e a aplicação para dados globais, como contadores ou configurações.

Não. Cada usuário recebe uma sessão separada, identificada por um ID de sessão exclusivo armazenado em um cookie. Um usuário não pode ler os valores da sessão de outro usuário, e é por isso que a sessão é usada para dados específicos de cada usuário.

Resuma esta postagem com: