Desenvolvimento - ASP. NET

Gerenciando estado com Sessão

Veremos neste artigo as principais funções do objeto Session.

por Leandro Braçaroto



Em nossas aplicações quase sempre é necessário manter o estado de objetos mesmo depois do envio para o servidor. Muitas vezes essas informações que desejamos guardar são pertinentes apenas para a página atual, ou seja, quando desejamos guardar as informações de objetos em uma mesma página e não na aplicação toda.

E é nesse momento que precisamos decidir qual objeto devemos utilizar para ter o resultado que esperamos. Neste artigo abordaremos as funcionalidades do objeto Sessão ou Session.

Funcionamento da Sessão

A sessão é muito usada nas aplicações para controlar acesso, tipo ou qualquer outra coisa, nos permitindo manter o estado dos dados no nível do usuário, ou seja, enquanto o usuário estiver conectado na aplicação, ele compartilha de uma mesma sessão até o fim de sua visita ou se houver TimeOut da sessão (tempo configurado para expirar a sessão caso o sistema fique ocioso). A sessão é criada pelo browser, isto é, cada vez que abro meu navegador é aberta uma sessão para controle, e também a cada inicio de uma aplicação usando .net é aberta uma sessão para o usuário.

O objeto Session armazena os dados temporariamente para cada visitante que acessa a aplicação, ou seja, toda a vez que um visitante abre uma página ASP.NET, ela verifica se o visitante já possui um objeto Session, caso não exista é criado.

A sessão em uma aplicação é determinada ou controlada por um tempo, com isso o ASP.NET "reinicia" o tempo de vida toda vez que o usuário requisita uma página, lembrando que ele "destrói" este objeto apenas depois de um período de ociosidade da aplicação - por padrão: 20 minutos (mas pode ser alterado de acordo com a necessidade), ou seja, se o usuário se autenticar em uma aplicação e ficar 20 minutos parado e depois continuar o acesso; a aplicação irá pedir para que o usuário se autentique novamente.

Colocando em prática

Para demonstrarmos que trabalhar com sessão é bem simples e fácil, segue abaixo como criar uma sessão:

VB.Net:
Session("Clicks") = "valor"

C#:
Session["Clicks"] = "valor";

Em uma aplicação, podemos criar qualquer tipo de sessão, e quantas precisarmos.
Nota: O uso exagerado do objeto Session compromete o desempenho de nossa aplicação, pois ele fica armazenado na memória do servidor em que a hospeda.

Para ler uma sessão basta fazer a seguinte forma:

VB.Net:
Response.Write(Session("Clicks"))

C#:
Response.Write(Session["Clicks"].ToString());

Abaixo, a Listagem 01 nos mostra como exemplo, uma rotina para armazenar credenciais do usuário depois que ele se autenticou na aplicação:
VB.Net:
Protected Sub ButtonAutentica_Click(ByVal sender As Object, ByVal e As EventArgs) 
    Try 
        If Me.TextBoxLogin.Text = "Leandro Braçaroto" And Me.TextBoxSenha.Text = "1234" Then 
            Session("sessionUser") = Me.TextBoxLogin.Text 
            Session("sessionPassword") = Me.TextBoxSenha.Text 
        End If 
    Catch ex As Exception 
        Response.Write(ex.Message) 
    End Try 
    
End Sub

C#:
protected void ButtonAutentica_Click(object sender, EventArgs e)
    {
        try
        {
            if (this.TextBoxLogin.Text == "Leandro Braçaroto" & this.TextBoxSenha.Text == "1234")
            {
                Session("sessionUser") = this.TextBoxLogin.Text;
                Session("sessionPassword") = this.TextBoxSenha.Text;
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        } 

    }
Listagem 01 - Autenticando usuário


Claramente que neste exemplo foi apenas para efeito de demonstração, não sendo implementado nenhum tipo de segurança.

Na Listagem 02, temos um exemplo de como barrar o acesso dos usuários não autenticados a uma determinada página:
VB.Net:
If Session("loginUser") = "" Then
Response.Redirect("default.aspx")
End If

C#:
if (Session("loginUser") == "") {
Response.Redirect("default.aspx");
}
Listagem 02 - Barrando acesso de usuários não autenticados


Note que a comparação é feita na sessão "loginUser", caso ela seja vazia significa que não foi criada na página de autenticação, com isso o usuário será redirecionado para a página de entrada. Também poderíamos exibir uma mensagem: "Você não tem acesso à esta página", por exemplo.

Duração da Sessão

Como já foi dito, a sessão por padrão é de 20 minutos, mas para alterarmos este tempo precisamos entrar no Web.config da aplicação e fazermos a seguinte inclusão como demonstrado na Listagem 03.
<configuration>
      <system.web>
        <sessionState timeout="10" />
      </system.web>
</configuration>
Listagem 03 - Alterando a duração da sessão


Removendo a Sessão

É muito importante ao trabalhar em uma aplicação onde o usuário deve-se autenticar para ter acesso, criar um botão também para ele deslogar.
Para que seja eliminada todas as sessões criadas pelo usuário, basta fazer da seguinte forma:

Session.Abandon()

Caso seja necessário eliminar uma sessão expecífica, faça-se assim:
VB.Net:
Session.Remove("sessionUser ") 
ou 
Session("sessionUser ") = nothing

C#:
Session.Remove("sessionUser ");
ou
Session("sessionUser ") = null;


Finalizando

Vimos neste artigo as principais funções do objeto Session, ele que tem uma importância extrema em nossas aplicações, nos ajudando muito a gerenciar as informações necessárias. Mas devemos nos atentar para o uso em excesso - como dito acima - que pode deixar nossas aplicações com um desempenho menor.

Abraços pessoal, até o próximo.
Leandro Braçaroto

Leandro Braçaroto - Formado em Processamento de Dados pela UNOPAR - Universidade do Norte do Paraná, experiências como analista e desenvolvedor Web desde 2003 (ASP e PHP), atualmente trabalha com VB.NET e C#, AJAX com banco de dados SQL SERVER e MYSQL. Aprimora seus conhecimentos estudando estas e outras tecnologias.