ASP
.NET - Aviso de encerramento da sessão usando jQuery
Neste artigo veremos como exibir uma mensagem de alerta ao usuário sobre o encerramento de sua sessão em uma página ASP .NET usando os recursos do jQuery.
O controle de sessão de uma aplicação web está diretamente ligado ao gerenciamento de estado da aplicação. De forma simplificada, podemos definir que o estado de uma página web é composto, basicamente, por todas as informações de uma página e seus controles ou campos de formulários.
Aplicações web utilizam o HTTP (Hypertext Transfer Protocol), que é um protocolo de comunicação utilizado no transporte das requisições e respostas entre o browser e o servidor web. O HTTP é um protocolo stateless, ou seja, um protocolo sem estado, o que, na prática, significa que ele não mantém o estado entre as requisições e respostas.
Assim, cada requisição feita por um cliente é tratada como se fosse uma nova, independente, não sendo mantida nenhuma relação de histórico das requisições feitas. Em aplicações desktop, os desenvolvedores não precisam se preocupar como o gerenciamento de estado, pois isso é feito de forma automática e transparente. Entretanto, isso não ocorre com as aplicações web devido à natureza do protocolo HTTP, que é a base desse tipo de aplicação.
Ambiente de Sessão
O principal objetivo da Sessão em uma aplicação ASP.NET é identificar e diferenciar cada um dos usuários que estão acessando a aplicação ASP.NET, criando um ambiente de memória exclusivo para cada um deles no servidor onde a aplicação é executada.
Uma aplicação web desenvolvida em ASP.NET cria um ambiente de sessão para um usuário no primeiro acesso de uma instância de browser que o mesmo faz à aplicação. Isso significa que, caso o usuário abra duas instâncias de browsers em um mesmo computador e acesse uma aplicação ASP.NET, serão criadas duas sessões, uma para cada instância de browser, cada uma em seu devido contexto.
Cada sessão de cada usuário é identificada através de um identificador de Sessão único, chamado de SessionID, enviado ao browser através de um cookie não-persistente ou na URL, dependendo de como a aplicação estiver configurada. Assim, depois da primeira requisição, o SessionID sempre será enviado pelo browser de volta para o servidor web nas requisições seguintes, possibilitando ao servidor identificar de qual usuário partiu a requisição, dando consistência à aplicação e evitando que, por exemplo, um usuário tenha acesso a informações de outro usuário.
Além disso, o ASP.NET também permite que utilizemos o ambiente de Sessão para armazenar dados de cada usuário que possui uma Sessão ativa na aplicação. Isso é possível através da propriedade Session, que é uma instância da classe HttpSessionState, exposta pelo objeto Page. Os dados são armazenados em variáveis de Sessão, em uma estrutura de dicionário na forma de pares chave-valor. É através da propriedade Session que temos acesso aos principais recursos do ambiente de Sessão do ASP.NET.
Por padrão a duração da Sessão é de 20 minutos mas podemos alterar este valor usando o Web.Config. Abaixo um exemplo onde alteramos o tempo de duração da sessão para 30 minutos:
<configuration>
<system.web>
<sessionState
timeout="30"></sessionState>
</system.web>
</configuration>
A sessão de um usuário é representada pelo objeto Session. Na tabela abaixo temos os principais métodos deste objeto:
Métodos | Descrição | Exemplo |
Session.Abandon | Abandona (anula) a sessão atual. | |
Session.Remove | Excluir um item da sessão de estado coleção. | Session(nome)
= Macorattii Inicializar uma variável de sessão Session.Remove(nome) |
Session.RemoveAll | Elimina todos os itens sessão estado | |
Session.Timeout | Define o tempo (em minutos) para uma sessão | Session.Timeout
= 30; Se um usuário não solicitar uma página do ASP.NET pedido dentro de 30 minutos a sessão termina.) |
Session.SessionID | Obtém o sessão ID para a sessão atual. | |
Session.IsNewSession | Verifica se a sessão do visitante
foi criado com a requisição atual ou seja se o
visitante acabou de entrar no site. A propriedade IsNewSession é True para a primeira página da aplicação ASP.NET. |
Dessa forma o objeto Session é útil para armazenar dados que o usuário irá requerer através do uso da aplicação; depois que o usuário deixar o site os dados serão perdidos após um intervalo de tempo. (Para armazenar as preferências do usuário você deve usar o objeto Profile ou cookies.)
Com base nestes conceitos vamos mostrar como podemos alertar o usuário de que sua sessão irá expirar em um determinado número de minutos definidos no código JavaScript. Para isso vamos usar jQuery.
Criando a aplicação ASP .NET
Vamos criar uma aplicação ASP .NET bem simples contendo duas páginas:
Além disso nossa aplicação irá conter uma pasta chamada scripts onde iremos colocar os arquivos jQuery.
Abra o Visual Web Developer 2010 Express Edition e crie um novo Web Site usando o template Visual C# do tipo ASP .NET Empty Web Site informando o nome SessaoExpirada;
![]() |
A seguir crie a pasta scripts clicando sobre o nome do projeto e selecionando a opção New Folder;
Inclua nesta pasta os arquivos jQuery (pode ser uma versão superior) :
Agora inclua duas páginas no projeto clicando no menu WebSite e a seguir na opção Add New Item;
Na janela selecione Web Form e informe o nome Logout.aspx e depois SessaojQuery.aspx;
Abra o arquivo SessaojQuery.aspx no modo Source e defina o código abaixo neste arquivo:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SessaojQuery.aspx.cs" Inherits="SessaojQuery" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Sessão jQuery</title> <script src="scripts/jquery-1.8.3.js" type="text/javascript"></script> <script type="text/javascript"> var sessao_Intervalo = 6000; var sessao_expiracaoMinutos = 7; var sessao_avisoMinutos = 2; var sessao_intervaloID; var sessao_ultimaAtividade; function initSession() { sessao_ultimaAtividade = new Date(); sessao_SetIntervalo(); $(document).bind('keypress.session', function (ed, e) { sessao_TeclaPressionada(ed, e); }); } function sessao_SetIntervalo() { sessao_intervaloID = setInterval('sessaoIntervalo()', sessao_Intervalo); } function sessao_LimpaIntervalo() { clearInterval(sessao_intervaloID); } function sessao_TeclaPressionada(ed, e) { sessao_ultimaAtividade = new Date(); } function sessao_LogOut() { window.location.href = 'Logout.aspx'; } function sessaoIntervalo() { var now = new Date(); //obtem a diferença de tempo em milisegundos var diferencaMilisegundos = now - sessao_ultimaAtividade; //obtem o tempo em minutos var diferencaMinutos = (diferencaMilisegundos / 1000 / 60); if (diferencaMinutos >= sessao_avisoMinutos) { //emite o aviso de expiração //para o timer sessao_LimpaIntervalo(); //mensagem de alerta var ativar = confirm('A sua sessão irá experir em ' + (sessao_expiracaoMinutos - sessao_avisoMinutos) + ' minutos (de ' + now.toTimeString() + '), pressione OK para permanecer logado ' + 'ou pressione Cancel para fazer o log off. \nAo se desconetar seus dados da sessão serão perdidos.'); if (ativar == true) { now = new Date(); diferencaMilisegundos = now - sessao_ultimaAtividade; diferencaMinutos = (diferencaMilisegundos / 1000 / 60); if (diferencaMinutos > sessao_expiracaoMinutos) { sessao_LogOut(); } else { initSession(); sessao_SetIntervalo(); sessao_ultimaAtividade = new Date(); } } else { sessao_LogOut(); } } } </script> </head> <body onload="initSession()"> <form id="form1" runat="server"> <div> <h1>Macoratti .net - Quase tudo para VB .NET , C# e ASP .NET</h1> </div> </form> </body> </html> |
A seguir abra o arquivo Logout.aspx no modo Source e defina o código abaixo neste arquivo:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Logout.aspx.cs" Inherits="Logout" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <h1>A sua sessão Expirou</h1> </div> </form> </body> </html> |
Rodando a aplicação iremos obter a página inicial SessaojQuery.aspx conforme abaixo:
![]() |
Após algum tempo teremos o aviso ao usuário de que sua sessão irá expirar:
![]() |
Clicando no botão Cancelar iremos para página Logout.aspx:
![]() |
Pegue o projeto completo
aqui:
SessaoExpirada.zip
João 12:24
Em verdade, em verdade vos digo: Se o grão de trigo caindo na terra não morrer, fica ele só; mas se morrer, dá muito fruto.João 12:25
Quem ama a sua vida, perdê-la-á; e quem neste mundo odeia a a sua vida, guardá-la-á para a vida eterna.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#