Capítulo 3: Handling Events and Managing State Lição 3: Using Server-Side State Management
Autor: quintelab | Publicado: 2011-05-19T20:23:00-07:00

Do contrário da lição 2, a lição 3 mostra as técnicas de gerenciamento de sessão no servidor. Você deve gerenciar os estados no servidor quando existe uma quantidade grande de dados e se torna oneroso a ida e vinda desses dados entre o cliente e o servidor. Outro grande motivo é a segurança, podemos trabalhar com dados sigilosos que não podem correr o risco de ficar disponível na máquina do cliente.

O asp.net disponibiliza duas formas de gerenciar pelo servidor, essas formas já foram citadas em lições anteriores. Os métodos são Application State e Session State.

O primeiro é global, ou seja, os dados são acessados por todos os usuário em qualquer página. Os dados armazenados no Application State são os mesmos para todos os usuários. Já o segundo método Session State é único por cada usuário, cada usuário tem a sua sessão, da mesma forma que o Application State os dados armazenados em Session State são acessados em qualquer página.

Application State

Os dados armazenados no Application State são globais e podem ser acessados em qualquer requisição de qualquer página. A classe HttpApplicationState é um dicionário de chave e valor e pode ser acessado pelo nome do chave. Os dados armazenados no Application State não são permanentes, no momento em que a aplicação é reiniciada, por exemplo quando o IIS ou o servidor é iniciado os dados armazenados neste sessão são perdidos.

Session State

&nbsp;Os dados armazenados com Session State também podem ser acessados de qualquer página, a grande diferença é que é único por usuário (browser). Por padrão esses dados são armazenados na memória do servidor, mas é possível&nbsp; é configurar para utilizar cookies, em State Serve ou em um banco de dados.


De forma similar ao Application State, o Session State é um dicionário de chave e valor, como demonstra o código:


// Caso a sessão não exista
if (Session["lastVisit"] != null)
{
&nbsp;&nbsp;&nbsp; Label1.Text = ((DateTime)Session["lastVisit"]).ToString();
}
else
{
&nbsp;&nbsp;&nbsp; Label1.Text = "Session does not have last visit information.";
}
// Definindo um valor para a sessão
Session["lastVisit"] = DateTime.Now;

Caso queira desabilitar o uso de sessões pode fazer no web.config:
&lt;configuration&gt;
&lt;system.web&gt;
&lt;sessionState mode="off"/&gt;
&lt;/system.web&gt;
&lt;/configuration&gt;

Ou&nbsp; definir na diretiva da página no caso de desabilitar em páginas especificas, utilizando a propriedade EnableSessionState:
&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" EnableSessionState = "False"%&gt;

É possível configurar a forma com que irá utilizar sua sessão:
InProc: é o modo padrão. É o que oferece melhor desempenho em relação as outras opções. No entanto ele fica limitado em cenários de balanceamento de carga entre servidores. Pois não terá como garantir que um usuário comece e termine seu processo no mesmo servidor.
StateServer: Nesta configuração os dados armazenados na sessão não são perdidos quando a aplicação é reiniciada, e neste cenário é possível fazer o compartilhamento entre servidores. O StateServer é um serviço do asp.net que esta em qualquer máquina que possua o FrameWork instalado. Este serviço não é configurado para iniciar automaticamente e sim manualmente, por isso deve ser feito essa mudança para que inicie automaticamente caso deseja usar.
SQLServer: Tem os mesmos benefícios do StateServer, armazena os dados quando a aplicação é iniciada e&nbsp; pode ser utilizado em vários servidores. Em hardware idêntico o StateServer supera o SQLServer, porém o SQLServer oferece integridade dos dados mais robustos e capacidade de relatórios.
Custom: Permite que você especifique uma sessão personalizada, necessitando do código para implementar seu armazenamento personalizado.
Off: Desativa as Sessões, deve utilizar esta opção caso queira desabilitar sessões.
Assim se encerra o capítulo III.

Abraços...