Escrito em July 13th, 2009 as 10:59 am por Raphael Silva Ferreira

0 Comentários

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:

<configuration>
<sessionstate mode="inproc" cookieless="false"
   timeout="20"
   sqlconnectionstring="datasource=127.0.0.1;userid=<userid>;password=<password>" server= "127.0.0.1" port= "42424" />
</configuration>

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

  • 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.

  • 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:
net start aspstate

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

<configuration>
<sessionstate mode="stateserver"  cookieless="false"
   timeout="20"
   sqlconnectionstring="datasource=127.0.0.1;userid=<userid>;password=<password>"
server= "127.0.0.1" port= "42424" />
</configuration>

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.

  • 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:
osql –S [server name] –U [user] –P [password] <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.

<configuration>
<sessionstate mode="stateserver"  cookieless="false"
   timeout="20"
   sqlconnectionstring="datasource=127.0.0.1;userid=<userid>;password=<password>" server= “127.0.0.1" port= "42424" />
</configuration>

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.

<asp:TextBox ID="txtSessao"  runat="server"></asp:TextBox>
<asp:TextBox ID="txtSessao2" runat="server"></asp:TextBox>

<asp:Button ID="btnInserir"  runat="server" Text="Inserir" />
<asp:Button ID="btnAlterar"  runat="server" Text="Alterar" />
<asp:Button ID="btnLimpar"   runat="server" Text="Limpar" />

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.

private void VerificaSessao()
{
   // Verifica se a variável existe
   if (Session["variavelSessao"] != null)
   {
      // Atribui o valor da váriavel de sessão "variavelSessao" a txtSessao2
      txtSessao2.Text =  Session["variavelSessao"].ToString();
   }
}

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:

protected void btnInserir_Click(object sender, EventArgs e)
{
   // Adiciona o valor digitado no TextBox a sessão
   Session.Add("variavelSessao", txtSessao.Text);

   // Método que verifica a sessão
   VerificaSessao();
}

Alterando o valor na sessão:

protected void btnAlterar_Click(object sender, EventArgs e)
{
   // Altera o valor da variável da sessão
   Session["variavelSessao"] = txtSessao.Text;

   // Método que verifica a sessão
   VerificaSessao();
}

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:

// Remove o valor da variável da sessão
Session.Remove("variavelSessao");

Limpando a sessão:

protected void btnLimpar_Click(object sender, EventArgs e)
{
   // Limpa a sessão
   Session.Clear();

   // Método que verifica a sessão
   VerificaSessao();
}

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

// Abandona a sessão
Session.Abandon();

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

protected void Page_Load(object sender, EventArgs e)
{
   // Verifica se é ou não postback
   if (!IsPostBack)
   {
      // Método que verifica a sessão
      VerificaSessao();
   }
}

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!

Posts Relacionados:

  1. Session, ViewState ou Cache o que utilizar?
  2. Problema ao Utilizar o SQLCe no ASP.NET
,

Be the first to start a conversation

Deixa uma Resposta

znjdb32s6g