ASP.NET – Login – Logout – timeout – C#

Publicado: 6 de dezembro de 2014 em C#

Tarefas de gerenciamento de sessão típicas incluem manter o controle de quais aplicativos estão abertos e documentar cada aplicativo que abriu, para que o mesmo estado possa ser restaurado quando o usuário sair e entrar novamente mais tarde. Você também pode utilizar a Session para criar áreas restritas de um website que podem ser acessadas pela sessão de um usuário, você também pode definir um tempo para que esta sessão fique ativa no navegador do usuário autenticado.

Para um site, gerenciamento de sessão pode envolver e exigir que o usuário reinicie sessão se a sessão expirou ou seja, se um certo limite de tempo passou sem a atividade do usuário. A sessão também é usada para armazenar informações no lado do servidor entre solicitações HTTP. Este tipo de conceito básico é o principio do esquema de autenticação utilizado por vários websites, entretanto a partir deste esquema básico pode-se criar métodos mais eficientes para utilizar este conceito.

O uso do ambiente de Sessão do ASP.NET consome recursos do servidor. Atente-se ao utilizar o recurso de tempo de sessão, devemos ser cuidadosos ao definirmos o tempo de duração da sessão inativa, pois quanto maior o tempo, mais irá demorar para o ASP.NET liberar os recursos utilizados.

Session State: http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.85).aspx

Utilizando Sessions – Login, Logout e Timeout

1- Crie uma aplicação do tipo ASP.NET Web Application com o modelo C# Empty e chame seu projeto de DASessionTimeout, crie uma nova pagina WebForm chamada default e uma pagina chamada AreaComunitaria. Copie o código para a pagina e rode o programa.

Você pode tentar chamar a pagina AreaComunitaria sem utilizar o usuário e senha, digitando o nome da pagina na url do navegador e constatará que não pode acessar a pagina devido a inexistência da sessão para seu usuário. Efetue o Login para criar a sessão:

Session - Login

Session – Login

2 – Assim que efetuar o login você será direcionado a área comunitária podendo então acessar a pagina da comunidade, caso clique no link sair, a sessão será invalidada e você será redirecionado para a tela de login:

Session - Área Comunitária

Session – Área Comunitária

3 – Ao incluir as tags de configuração da sessão no arquivo web.config você pode definir o tempo em minutos que deseja que sessão seja valida. Use o código do arquivo xml abaixo para fazer com que a sessão dure 1 minuto, efetue o login, aguarde um minuto e atualize a pagina, com a sessão expirada você será redirecionado novamente para a pagina de login:

Session - Timeout

Session – Timeout

Gerenciamento de Sessão ASP.NET

Este é um modo simples de utilizar uma sessão em ASP.NET e é valido como um exercício, entretanto existem vários outras maneiras mais eficientes de gerenciar ambientes de sessão:

Ambientes de Sessão: http://msdn.microsoft.com/pt-br/library/gg454582.aspx

Exemplo:

Neste exemplo criamos uma pagina de login com a funcionalidade de autenticar em uma pagina somente para membros da comunidade e utilizamos o recurso de timeout da sessão para que ela expire assim que o usuário estiver autenticado por 1 minuto.

Obs: usuário: DevAberto e a senha: 1234

ASP.NET – C#

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="DaSessionTimeout._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Desenvolvimento Aberto - Login</title>
    <style type="text/css">
        .auto-style1 {
        }
        .auto-style2 {
            width: 103px;
            height: 23px;
        }
        .auto-style3 {
            height: 23px;
        }
        .auto-style4 {
            height: 30px;
        }
    </style>
</head>
<body>
    <h1>Desenvolvimento Aberto</h1>
    <h3>Login:</h3>
    <form id="form1" runat="server">
    <div>

        <table style="width:100%;">
            <tr>
                <td class="auto-style2">
                    <asp:Label ID="Label1" runat="server" Text="Usuário:"></asp:Label>
                </td>
                <td class="auto-style3">
                    <asp:TextBox ID="TextBox1" runat="server"  Width="207px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td class="auto-style4">
                    <asp:Label ID="Label2" runat="server" Text="Senha:"></asp:Label>
                </td>
                <td class="auto-style4">
                    <asp:TextBox ID="TextBox2" runat="server" TextMode="Password" Width="207px"></asp:TextBox>
                    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Entrar" />
                </td>
            </tr>
            <tr>
                <td class="auto-style1" colspan="2">&nbsp;</td>
            </tr>
        </table>

    </div>
    </form>
</body>
</html>

default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DaSessionTimeout
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // Recupera elementos do formulario
            string usuario = Request.Form["TextBox1"];
            string senha   = Request.Form["TextBox2"];

            // Neste exercicio usuario e senhas são fixos
            // Estes dados geralmente estão associados a um banco de dados
            if ( usuario.Equals("DevAberto") && senha.Equals("1234"))
            {
                Session["Usuario"] = usuario;
                Response.Redirect("AreaComunitaria.aspx");
            }
            else
            {
                Response.Redirect("default.aspx");
            }

        }
    }
}

AreaComunitaria.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AreaComunitaria.aspx.cs" Inherits="DaSessionTimeout.AreaComunitaria" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Desenvolvimento Aberto - ASP.NET - C#</title>
</head>
<body>
    <h1>Desenvolvimento Aberto</h1>
    <h3>Area da Comunidade - C# - ASP.NET</h3>
    <form id="form1" runat="server">
    <div>
       <div>
           <% string usuario = (string)Session["Usuario"];
               Response.Write("Bem Vindo: " + usuario); %>
           <br />
           <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Sair</asp:LinkButton>
       </div>
    </div>
    </form>
</body>
</html>

AreaComunitaria.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DaSessionTimeout
{
    public partial class AreaComunitaria : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Recupera usuario da sessão
            string usuario = (string)Session["Usuario"];

            // Sessão for invalida
            if (usuario == null)
            {
                Response.Redirect("default.aspx");
            }

        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            // Invalida Sessão
            Session.Abandon();
            Response.Redirect("default.aspx");
        }
    }
}

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />

  <sessionState timeout="1" />

  </system.web>
</configuration>
Anúncios
comentários
  1. Doimo disse:

    Bem bacana! Obrigado.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s