Desenvolvimento - ASP. NET

Configurando e utilizando a Session

Depois de esclarecidas as diferenças entre Session, ViewState e Cache, vamos ver como configurar e utilizar esta boa ferrementa chamada Session.

por Raphael Silva Ferreira



Session (sessão) é o período de tempo em que o usuário interage com a aplicação. Em termos de programação a sessão é a memória em forma de dicionário ou ainda de uma tabela hash. Por exemplo, a sessão pode ser um conjunto de valores-chave que podem ser definidos e lidos por um usuário, durante a utilização da aplicação web pelo mesmo.

A configuração da sessão é feita diretamente no web.config:


Figura 1 - Configuração do web.config para InProc

As opções para a configuração são as seguintes:
  • Mode: O Asp.Net suporta dois modos: no processo e fora do processo. Sendo assim o modo de configuração suporta três opções: inproc, stateserver e sqlserver;
  • Cookieless: Define se o cookie estará ativo ou não para o Asp.Net, é definido por um valor booleano;
  • Timeout: Define por quanto tempo a sessão é válida. É calculado pelo tempo atual mais o tempo de timeout. Deve ser passo o valor em minutos e por default no .NET a sessão dura vinte minutos;
  • SqlConnectionString: É a referência da conexão de banco de dados do SQL Server;
  • Server: No modo StateServer é o nome do servidor que está executando os serviços do Windows NT: ASPSTATE;
  • Port: Identifica o número da porta do servidor quando este se encontra configurado no modo stateserver;
Modos de Configuração

1. InProc
O mode de processo (InProc) utiliza basicamente a sessão do Asp.NET, ou seja, a sessão é controlada em processo e caso o processo seja re-cíclico o estado é perdido. Em termos de desempenho é o mais rápido, pois o dado já está em processo. Quanto à configuração utiliza cokieless e o timeout da configuração padrão da sessão do ASP.NET.
No caso de perder a sessão os dados serão perdidos, para fazer um teste basta adicionar um valor na sessão (vide o tópico utilizando a sessão deste mesmo artigo) e logo em seguida parar e iniciar novamente o serviço do ISS (iisreset) e verificar que o valor foi perdido.

2. StateServer
Neste modo de configuração a sessão é gerenciada por um serviço, o ASPSTATE que deve ser iniciado. Para iniciar o serviço abra o prompt de comando navegue até o diretório da framework "v1.0.2204" (Ex: "c:\Windows\Microsoft .net\framework\v1.0.2204") e execute o comando:


Figura 2 - Iniciando o serviço aspstate.

Depois de iniciado o serviço basta mudar no web.config a opção mode para stateserver, conforme figura abaixo:


Figura 3 - Configuração do web.config para stateserver.

Podemos agora repetir o teste realizado no modo InProc que ao pausar e iniciar novamente o serviço do IIS o valor adicionado na sessão será mantido.

3. SQL Server Mode
Funciona da mesma maneira que o stateserver, porém a sessão é armazenada no SQL. Para utilizar o SQL Server state é necessário criar as tabelas em que o Asp.NET irá procurar os dados, para isso o .NET SDK já nos trás um script pronto o state.sql. O script se encontra no mesmo caminho que o aspstate modificando somente a versão do framework desejada.
Para executar o script utilizaremos linha de comando no prompt de comando e o comando osql conforme a figura abaixo:


Figura 4 - Executando o state.sql.

Após executado o script deve-se reiniciar o serviço do SQL Server para que os novos serviços criados a partir do state.sql possam também ser iniciados. Em seguida deve-se alterar o web.config de maneira que fique semelhante ao exemplo a seguir.


Figura 5 - Configurando o web.config para o SQL Server mode. Se novamente repetirmos o teste e reiniciarmos o serviço do ISS notaremos que não perdemos o valor da sessão e desta vez temos um nível de confiança maior, pois dificilmente o SQL pararia de funcionar e em caso desse servidor parar outro poderia assumir em sua lugar.

Utilizando a Sessão

Depois de configurarmos vamos ver como utilizar a sessão. Primeiramente vamos abrir o visual Studio e criar um aplicação web utilizando o menu File -> New Project -> (C# ou VB) Web -> Asp.NET Web Application. Vamos dar o nome do projeto de "Sessao".

Agora vamos adicionar duas textbox e três botões para podermos verificar o funcionamento da sessão.



Primeiro iremos adicionar um método que será responsável pela verificação da variável de sessão que vamos chamar de "variavelSessao" e em caso desta existir e possuir valor irá passar este valor a txtSessao2.



Vamos agora adicionar um evento para cada botão e juntamente de cada um os valores de como inserir, alterar e limpar a sessão.

Inserindo o valor na sessão:



Alterando o valor na sessão:



Ao fazer a alteração no valor que está na sessão também pode ser utilizado a mesma linha de quando inserimos o valor na sessão, uma vez que se o a variável já existir ela terá seu valor sobrescrito.

Excluindo o valor na sessão:



Limpando a sessão:



Para limpar a sessão ainda é possível utilizar o seguinte comando:



Agora no Page_Load vamos acrescer o código que irá verificar o postback e também verificar o valor da sessão.



Agora que já configuramos e aprendemos a utilizar a Session, devemos lembrar que não se deve colocar tudo na Session, pois não temos controle de quanta informação ela pode guardar. A session não é como um array que estoura quando chega ao seu limite, ela sobrescreve os dados. Fica o conselho de usar a session quando for tramitar valores entre as páginas ao invés de usar querystrings e ou ainda utilizá-la para guardar valores temporários como um login de usuário por exemplo.

Nunca se esqueçam, depois de usarem os valores e não necessitarem mais dos mesmos, retirem-nos da session!

Um Grande abraço!
Raphael Silva Ferreira

Raphael Silva Ferreira - Formado em Bacharelado em Ciência da Computação pela PUC-PR, atua como analista de sistemas na plataforma .NET. Desenvolve aplicações Web com C# e ASP.NET há cinco anos possuindo certificação da Microsoft MCP em .NET Framework 2.0.