Utilizando Sessions para uma aplicação WebForms

Nesta aula você irá aprender como utilizar Sessions, qual o rendimento no servidor e como limitar o tempo de timeout.

assinaturaAssine nossa Comunidade

Web Forms -Sessions

Sessions são bem utilizadas em aplicações Web forms C# quando normalmente queremos fazer login de um usuário, passar dados de uma págima para outra e de uma sessão do seu Web Page para outra sessão do seu web page.

Existem outras tecnologias que podemos utilizar, como ViewState e Cookies. Nesta aula iremos dar foco na utilização de Sessions.

Um exemplo de utilização de sessions é quando temos uma HomePage e criamos outras páginas que são acessadas através da HomePage, como uma página de 'sobre', 'downloads', 'vendas', etc.

Quando o cliente acessa estas páginas, ele precisa ver as informações trazidas do servidor para o browser. Assim, para obter essas informações, o cliente digita os dados de nome ou e-mail e senha, algo para identificar a sessão dele no site e esses dados precisam ser trafegados entre outras sessões do site, mostrando para este usuário que ele está com um sistema personalizado.

Esses dados precisam ser enviados para o servidor. Estes dados também podem ser enviados por queryString na url, porém, se não quisermos enviar parãmetros entre url, podemos utilizar Sessions e o servidor então irá armazená-las na memória local.

Se o servidor for reiniciado ou entrar em modo sleep, essa session será apagada, pois foi armazenada em memória volátil.

Sessions possuem tempo de timeout (expiração) onde determinamos quantos minutos a session ficará ativa.

O problema da utilização de sessions é que o armazenamentos dos dados ficam diretamente guardados no servidor e se o site tiver muitos acessos, serão criados vários espaços na memória do servidor fazendo com que este servidor fique fora do ar.Por isso quando se tem um site com muitos acessos, normalmente é utilizada a técnica de cookies ou ViewState (para.net), dependendo do caso.

Em resumo as sessions são variáveis que são armazenadas no servidor de forma temporária.

Criar uma Session

Para criar uma session, primeiro digitamos o nome Session e, entre colchetes, definimos um nome que queremos representar esse espaço na memória.

Vamos fazer um exemplo e inserir no formulário os seguintes componentes:

  • Button
    name: Button1
  • Label / TextBox
    name: lblEmail
    name: txtEmail
  • Label / TextBox
    name: lblNome
    name: txtNome

Agora iremos criar duas variáveis do tipo Session, email e nome, no método Button1_Click.

Ao clicar neste método, vamos inserir nas variáveis Session, o conteúdo do TxtEmail e TxtNome que o usuário digitou. A partir desse momento já teremos duas variáveis no servidor ou seja, duas sessões ativas, porém ainda não estão sendo mostradas em nenhum lugar do sistema.

      
        public partial class _Default : Page
        {
  
          protected void Button1_Click(object sender, EventArgs e)
          {
            Session["email"] = txtEmail.Text;
            Session["nome"] = txtNome.Text;
          }
  
        }  
       
    

Mostrar Session com Response.Write

Ao carregar a página, no evento Load, mostraremos o conteúdo das Sessions email e nome.

Para isso vamos utilizar Response.Write.

      
        public partial class _Default : Page
        {
  
          protected void Page_Load(object sender, EventArgs e)
          {
           Response.Write(Session["email"]);
           Response.Write("< br>");
           Response.Write(Session["nome"]);
          }
  
        }  
       
    

Agora podemos navegar pelo nosso site, pois os dados estão armazenados no servidor. Se estes dados tivessem sido alterados no HTML e nós entrassemos em outra página, esses dados não iriam aparecer.

Para mostrar as Sessions email e nome na página 'Sobre',que é a página About, utilizaremos novamente o Response.Write no evento Load da página:

      
        public partial class _About : Page
        {
  
          protected void Page_Load(object sender, EventArgs e)
          {
           Response.Write(Session["email"]);
           Response.Write("< br>");
           Response.Write(Session["nome"]);
          }
  
        }  
       
    

Assim, quando navegamos entre essas duas páginas, vemos as informações armazenadas nas Sessions que estão no servidor e não foi necessário enviar estes dados por querystring.

Configurar tempo de sessão com SessionState

Para configurarmos o tempo que a variável Session irá permanecer ativa no sistema, podemos configurar de duas formas:

  • Localmente - através do arquivo Web.config da aplicação;
  • No servidor - através do arquivo de configuração do IIS do servidor Windows.

Através da tag SessionState no arquivo web.config, configuramos o timeout em minutos, que no exemplo abaixo, a sessão vai durar 1 minuto.

      
        < configuration> 
          < system.web>
            < SessionState timeout="1"> < /SessionState> 
          < /system.web>
      < /configuration>
       
    

É importante fazer uma avaliação do tempo de sessão que um usuário pode permancer ativo, pois, imagine o cenário em que a aplicação tem um milhão de acessos e possui muitas pessoas acessando o sistema. Se for configurado uma session de dez, vinte, meia hora ou duas horas, isso pode derrubar o servidor , pela quantidade de sessões que foram abertas. Assim, é preciso fazer uma análise caso a caso para não haver problemas no futuro.

Validar a Sessão

Vamos fazer um exemplo de sessão personalizada de email e nome, onde iremos mostrar uma div HTML, se o usuário estiver logado e outra div, se o usuário não estiver logado.

Criaremos uma div com propriedade id="nãoLogado" e outra com id="Logado"

      
        < div id = "naoLogado">
          < p>
            < asp:Label ID="Label1" runat="server" Text="Email"> < /asp:Label>
            < asp:TextBox ID="txtEmail" runat="server">< /asp:TextBox>
            < asp:Label ID="Label2" runat="server" Text="Nome">< /asp:Label>
            < asp:TextBox ID="txtNome" runat="server">< /asp:TextBox>
            < asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text= "Entrar" />
          < /p>
        < /div>

        < div id = "logado" runnat="server"> < h1>Logado no sistema < /h1>
       
    

No arquivo aspx.cs, faremos a validação utilizando a propriedade Visible para deixar visivel ou não as divs Html que foram criadas.

      
        public partial class _Default : Page
        {

          protected void Page_Load(object sender, EventArgs e)
          {
            if(Session["email"] == null)
            {
              logado.Visible = false;
              naoLogado.Visible = true;
            }
            else 
            {

              Response.Write(Session["email"]);
              Response.Write("< br>");
              Response.Write(Session["nome"]);

              logado.Visible = true;
              naoLogado.Visible = false;
            }
          }

        }  
       
    

Lembrando também que a sessão é por browser. Se abrirmos dois browsers no nosso computador, o sistema identificará que estamos em dois lugares diferentes e criará outra sessão.

Utilizando Sessions para uma aplicação WebForms

Nesta aula você irá aprender como utilizar Sessions, qual o rendimento no servidor e como limitar o tempo de timeout.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Web Forms -Sessions

Sessions são bem utilizadas em aplicações Web forms C# quando normalmente queremos fazer login de um usuário, passar dados de uma págima para outra e de uma sessão do seu Web Page para outra sessão do seu web page.

Existem outras tecnologias que podemos utilizar, como ViewState e Cookies. Nesta aula iremos dar foco na utilização de Sessions.

Um exemplo de utilização de sessions é quando temos uma HomePage e criamos outras páginas que são acessadas através da HomePage, como uma página de 'sobre', 'downloads', 'vendas', etc.

Quando o cliente acessa estas páginas, ele precisa ver as informações trazidas do servidor para o browser. Assim, para obter essas informações, o cliente digita os dados de nome ou e-mail e senha, algo para identificar a sessão dele no site e esses dados precisam ser trafegados entre outras sessões do site, mostrando para este usuário que ele está com um sistema personalizado.

Esses dados precisam ser enviados para o servidor. Estes dados também podem ser enviados por queryString na url, porém, se não quisermos enviar parãmetros entre url, podemos utilizar Sessions e o servidor então irá armazená-las na memória local.

Se o servidor for reiniciado ou entrar em modo sleep, essa session será apagada, pois foi armazenada em memória volátil.

Sessions possuem tempo de timeout (expiração) onde determinamos quantos minutos a session ficará ativa.

O problema da utilização de sessions é que o armazenamentos dos dados ficam diretamente guardados no servidor e se o site tiver muitos acessos, serão criados vários espaços na memória do servidor fazendo com que este servidor fique fora do ar.Por isso quando se tem um site com muitos acessos, normalmente é utilizada a técnica de cookies ou ViewState (para.net), dependendo do caso.

Em resumo as sessions são variáveis que são armazenadas no servidor de forma temporária.

Criar uma Session

Para criar uma session, primeiro digitamos o nome Session e, entre colchetes, definimos um nome que queremos representar esse espaço na memória.

Vamos fazer um exemplo e inserir no formulário os seguintes componentes:

  • Button
    name: Button1
  • Label / TextBox
    name: lblEmail
    name: txtEmail
  • Label / TextBox
    name: lblNome
    name: txtNome

Agora iremos criar duas variáveis do tipo Session, email e nome, no método Button1_Click.

Ao clicar neste método, vamos inserir nas variáveis Session, o conteúdo do TxtEmail e TxtNome que o usuário digitou. A partir desse momento já teremos duas variáveis no servidor ou seja, duas sessões ativas, porém ainda não estão sendo mostradas em nenhum lugar do sistema.

      
        public partial class _Default : Page
        {
  
          protected void Button1_Click(object sender, EventArgs e)
          {
            Session["email"] = txtEmail.Text;
            Session["nome"] = txtNome.Text;
          }
  
        }  
       
    

Mostrar Session com Response.Write

Ao carregar a página, no evento Load, mostraremos o conteúdo das Sessions email e nome.

Para isso vamos utilizar Response.Write.

      
        public partial class _Default : Page
        {
  
          protected void Page_Load(object sender, EventArgs e)
          {
           Response.Write(Session["email"]);
           Response.Write("< br>");
           Response.Write(Session["nome"]);
          }
  
        }  
       
    

Agora podemos navegar pelo nosso site, pois os dados estão armazenados no servidor. Se estes dados tivessem sido alterados no HTML e nós entrassemos em outra página, esses dados não iriam aparecer.

Para mostrar as Sessions email e nome na página 'Sobre',que é a página About, utilizaremos novamente o Response.Write no evento Load da página:

      
        public partial class _About : Page
        {
  
          protected void Page_Load(object sender, EventArgs e)
          {
           Response.Write(Session["email"]);
           Response.Write("< br>");
           Response.Write(Session["nome"]);
          }
  
        }  
       
    

Assim, quando navegamos entre essas duas páginas, vemos as informações armazenadas nas Sessions que estão no servidor e não foi necessário enviar estes dados por querystring.

Configurar tempo de sessão com SessionState

Para configurarmos o tempo que a variável Session irá permanecer ativa no sistema, podemos configurar de duas formas:

  • Localmente - através do arquivo Web.config da aplicação;
  • No servidor - através do arquivo de configuração do IIS do servidor Windows.

Através da tag SessionState no arquivo web.config, configuramos o timeout em minutos, que no exemplo abaixo, a sessão vai durar 1 minuto.

      
        < configuration> 
          < system.web>
            < SessionState timeout="1"> < /SessionState> 
          < /system.web>
      < /configuration>
       
    

É importante fazer uma avaliação do tempo de sessão que um usuário pode permancer ativo, pois, imagine o cenário em que a aplicação tem um milhão de acessos e possui muitas pessoas acessando o sistema. Se for configurado uma session de dez, vinte, meia hora ou duas horas, isso pode derrubar o servidor , pela quantidade de sessões que foram abertas. Assim, é preciso fazer uma análise caso a caso para não haver problemas no futuro.

Validar a Sessão

Vamos fazer um exemplo de sessão personalizada de email e nome, onde iremos mostrar uma div HTML, se o usuário estiver logado e outra div, se o usuário não estiver logado.

Criaremos uma div com propriedade id="nãoLogado" e outra com id="Logado"

      
        < div id = "naoLogado">
          < p>
            < asp:Label ID="Label1" runat="server" Text="Email"> < /asp:Label>
            < asp:TextBox ID="txtEmail" runat="server">< /asp:TextBox>
            < asp:Label ID="Label2" runat="server" Text="Nome">< /asp:Label>
            < asp:TextBox ID="txtNome" runat="server">< /asp:TextBox>
            < asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text= "Entrar" />
          < /p>
        < /div>

        < div id = "logado" runnat="server"> < h1>Logado no sistema < /h1>
       
    

No arquivo aspx.cs, faremos a validação utilizando a propriedade Visible para deixar visivel ou não as divs Html que foram criadas.

      
        public partial class _Default : Page
        {

          protected void Page_Load(object sender, EventArgs e)
          {
            if(Session["email"] == null)
            {
              logado.Visible = false;
              naoLogado.Visible = true;
            }
            else 
            {

              Response.Write(Session["email"]);
              Response.Write("< br>");
              Response.Write(Session["nome"]);

              logado.Visible = true;
              naoLogado.Visible = false;
            }
          }

        }  
       
    

Lembrando também que a sessão é por browser. Se abrirmos dois browsers no nosso computador, o sistema identificará que estamos em dois lugares diferentes e criará outra sessão.