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 FerreiraSession (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:
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!
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;
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!