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:



Be the first to start a conversation