Olá pessoal, neste artigo veremos os conceitos e a sintaxe para o uso de um modelo de persistência do ASP.NET, usado para armazenar variáveis de sessão que  se chama Session.

Usamos como mecanismo de persistência dos dados as variáveis de sessão, representadas pelo objeto chamado Session, aí podemos usar uma chave neste objeto e depois o recuperarmos por meio desta chave.

As variáveis de sessão são responsáveis por identificar requisições provenientes de um mesmo navegador em um período de tempo definido, além de manter variáveis para a duração da sessão. Assim, conforme o usuário navega por diferentes paginas ASP.NET que compõem uma aplicação Web, o estado da sessão permite obter e armazenar os valores desse usuário.

Funciona assim: toda vez que um usuário acessa uma página da Web qualquer, a aplicação cria uma sessão para este usuário e envia um Cookie (que será abordado melhor em outro artigo) para o browser dele, com o ID da Sessão respectiva. Dito isto, o usuário pode navegar pelas páginas Web desta aplicação, ir armazenando valores nesta Sessão, que ficará armazenada no servidor durante seu acesso e, posteriormente, recuperar as informações que foram acessadas.

Uma dica: a Session é um recurso muito bom para armazenar valores específicos de cada usuário de sua aplicação e persistir os dados corretamente, mais tome cuidado com o uso exagerado de armazenamento de informações na Session. Por exemplo: se sua aplicação contém mil usuários e para cada um deles é armazenado 1MB em sua Session, imagine a quantidade de memória que você precisará ter disponível em seu servidor!

Por padrão, o ASP.NET utiliza Cookies para rastrear o usuário, porém, muitos deles desligam o cookie de seu browser. Para resolver esse problema, o ASP.NET tem um recurso interessante que é o SessionID, que é inserido na URL (parecido com a QueryString) e, assim, cada usuário tem uma página única e fica simples para o servidor identificar quando uma requisição vem da mesma pasta.

Para configurarmos esta opção, de criar variáveis de sessão mesmo que o usuário desligue os cookies em seu computador, coloque este valor, dentro das tag’s system.web, no arquivo Web.Config:

<sessionState cookieless="AutoDetect" />

Outra dica: antes do ASP.NET deixar uma sessão e tornar a ID da mesma inválida, é transcorrido um período de tempo em que a sessão permanece ociosa. Esse período costuma ser chamado de tempo de vida da sessão. O tempo de vida dela pode ser gerenciado por meio da opção de configuração timeout, que é dado em minutos. O valor padrão é 20 e o máximo é 525.601, o que equivale a um ano. O valor abaixo ilustra a alteração para 2 minutos de timeout:

<sessionState mode="InProc" timeout="2" />

Exemplo prático

A idéia é a seguinte: neste exemplo bem simples vamos criar duas páginas, na primeira vamos salvar o valor na Session e na segunda iremos recuperar este valor. Dito isto, crie uma aplicação Web, dando a ela o nome ExemploSession e dê OK.

Na Default.aspx, arraste da ToolBox um TextBox, um Label e um Button, dando a eles os ID’s: txtNome, lblNome e btnGravar.

Agora vá à página de códigos e crie o método Salvar:

private void Salvar()
{
    try
    {
        Session["Salvar"] = this.txtNome.Text;
        this.lblNome.Text = "Arquivo salvo na Session!";
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Bem simples né? Esse método irá, como o próprio nome diz, salvar o que o usuário digitar no TextBox na Session e depois disso a Label irá receber o texto acima.

Lembre-se de dar dois cliques no botão Salvar e chamar o método recém-criado:

protected void btnGravar_Click(object sender, EventArgs e)
{
    Salvar();
}

Agora adicione uma nova página em sua aplicação. Nela, arraste um Button e um Label, sua página deverá ficar desta forma:

Botão recuperar dados da Session

Vá à página de códigos e crie o método Recuperar, como você vê abaixo:

private void Recuperar()
{
    try
    {
        lblNome.Text = "O valor da sua Session é: " + Session["Salvar"].ToString();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Ele irá recuperar o valor gravado anteriormente na Session. Chame este método no botão criado:

protected void btnRecuperar_Click(object sender, EventArgs e)
{
    Recuperar();
}

Agora volte a página de códigos da Default.aspx e faça uma verificação no método Salvar:

private void Salvar()
{
    try
    {
        if (txtNome.Text != string.Empty)
        {
            Session["Salvar"] = this.txtNome.Text;
            this.lblNome.Text = "Arquivo salvo na Session!";
        }
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Perceba que agora estou validando se o campo texto é diferente de nulo. Se for, armazeno o valor digitado na Session e exibo a mensagem de confirmação ao usuário, como feito anteriormente. Antes de compilar, abra a Solution Explorer (CTRL + W + S), clique com o botão direito na Default.aspx e clique em Set As Start Page, para defini-la como página inicial.

Agora vamos testar a aplicação, aperte F5 para compilar, clique em OK para habilitar que o Web.Config compile sua aplicação e aguarde.

Digite seu nome e clique em OK.

Nome digitado e salvo na Session

Agora abra a Default2.aspx e clique no botão para recuperar o seu nome:

Nome recuperado da Session

Assim finalizo o artigo. Muito obrigado a todos!

Um abraço, e até o próximo artigo.