Vous êtes sur la page 1sur 5

Descobrindo quando o usurio sai de uma aplicao ASP.

NET Parte 2

http://www.ecode10.com/artigo/337/Descobrindo+quando+o+usuario+...

Entrar

Esqueceu a senha

Quem somos

Fale conosco

Seguir @ecode10

97 seguidores

Artigos Cadastre-se Grtis


C# Apple

Revistas

Empregos

Colaboradores

Vdeos

Podcast

Frum

Direitos Autorais e-Books


Vdeos

Cadastrar Artigos
Mobilidade

Cadastrar Notcias
Automao Comercial

Cadastrar Empregos
WebService

Consultar Empregos
Podcasts

Novidades

Banco de Dados

Busca Online:

Mensagem pra voc!

Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2


por Ricardo Oneda em 28/2/2007
Share Curtir Tweet Enviar 1

Torne-se autor do site escrevendo artigos e ebooks, criando vdeos e podcast's. Veja tambm os nossos vdeos publicados gratuitamente.

Cadastrar artigo Cadastrar emprego Cadastrar notcia

Introduo Na primeira parte deste artigo, foi mostrado como podemos detectar a inatividade do usurio de uma aplicao ASP.NET atravs do evento Session_End. Como explicado, o evento Session_End ocorre somente quando o tempo de inatividade especificado atingido. Ou seja, quando o usurio acessa um outro site ou fecha o browser, o evento Session_End no disparado automaticamente. Isso acontece porque os eventos de troca de site e de fechamento de browser ocorrem no lado cliente da aplicao, enquanto que o evento Session_End um evento que ocorre no lado servidor. Outra limitao do evento Session_End que ele s chamado quando o modo do estado de sesso estiver configurado como InProc. Ou seja, quando utilizarmos algum servidor de estado para armazenar a sesso, o evento no ser disparado. Caso desejemos fazer algum processamento no exato momento em que o usurio acessa outro site ou fecha o browser, precisamos desenvolver alguma funcionalidade que avise o servidor que algum desses eventos ocorreu. Nesta parte do artigo, explicarei algumas tcnicas para que a aplicao possa notificar a ocorrncia desses eventos ao servidor.

Publicidade

Traduzir esta pgina


Evento onunload Quando trocamos o site que estamos visitando ou fechamos a janela do browser, o evento javascript onunload disparado no lado cliente. Portanto, esse o local ideal para colocarmos o cdigo de tratamento especfico para quando o usurio deixar a aplicao. O que se costuma fazer neste evento chamar uma pgina que seja responsvel pelo encerramento da sesso do usurio. Isso pode ser feito de algumas maneiras. A forma mais comum era utilizar cdigo javascript para abrir uma popup, apontando para a pgina
Ingls

Microsoft Translator

ecode10

ecode10

1 de 5

18/06/2012 14:30

Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2

http://www.ecode10.com/artigo/337/Descobrindo+quando+o+usuario+...

responsvel pela finalizao da sesso. Com a crescente popularizao dos bloqueadores de popups, essa tcnica tornou-se ineficiente, pois os bloqueadores, ao impedirem a abertura da popup, impossibilitam que a pgina no servidor seja chamada. No exemplo deste artigo, ser utilizado o conceito de AJAX - Asynchronous JavaScript and XML, para fazer a chamada pgina. Explicada de maneira simplificada, a tcnica AJAX permite que cdigo javascript acesse o servidor web sem a necessidade de submeter a pgina, como ocorreria com um Web Form tradicional. Isso permitir que o servidor seja acessado sem a necessidade de abertura de popup. No Visual Studio 2005, abra o Web Site Saida que foi criado na primeira parte deste artigo. No Solution Explorer, clique com o boto direito do mouse sobre o Web Site Saida e escolha a opo Add New Item. Na janela que aberta, escolha o template Web Form. D o nome de Finaliza.aspx e escolha a linguagem Visual C#. Esta pgina que acabamos de criar ser a responsvel por expirar a sesso do usurio quando o evento onunload ocorrer. Ainda no Solution Explorer, clique com o boto direito sobre a pgina Finaliza.aspx e escolha a opo View Code, para que o editor de cdigo do Visual Studio seja aberto. No evento Page_Load da pgina, adicione o seguinte cdigo:

ecode10 Kinect Animals para Android e i ecode10.com/artigo/1536/Ki @ecode10


about 1 hour ago reply retweet

ecode10 Mistrio Microsoft hoje ecode10.com/artigo/1535/Mi @ecode10


about 1 hour ago reply retweet

ecode10 Ultrabook Acer Aspire S5 ecode10.com/artigo/1534/Ac @ecode10


2 days ago reply retweet favorite

ecode10 Comunicao entre Forms ecode10.com/artigo/1533/Co @ecode10


2 days ago reply retweet favorite

ecode10 O custo do Windows 8 ecode10.com/artigo/1532/O+ @ecode10


3 days ago reply retweet favorite

protected void Page_Load(object sender, EventArgs e) { Session.Abandon(); }

ecode10 Vdeo - Curso de C# (dois vde grtis para visualizar) - acesse e veja: ecode10.com/artigo/1531/vi @ecode10
5 days ago reply retweet favorite

No cdigo acima, chamamos o mtodo Abandon() do objeto Session, que responsvel por finalizar a sesso atual. Quando ele executado, foramos a expirao da sesso. Assim, o evento Session_End tambm disparado quando o mtodo Abandon() executado. Obs: lembre-se que se estivssemos utilizando um modo de armazenamento de sesso diferente de InProc, o evento Session_End no seria chamado. Neste caso, teramos que colocar o cdigo do evento Session_End dentro do evento Page_Load da pgina Finaliza.aspx. Para mais informaes sobre as formas de armazenamento de sesso do ASP.NET, consulte as Referncias ao final do artigo. Agora, no evento onunload do browser, precisamos programar a chamada pgina Finaliza.aspx. No Solution Explorer, clique com o boto direito do mouse sobre a pgina Pagina1.aspx e escolha a opo View Markup. Isso nos levar ao contedo HTML da pgina. Na tag <body>, adicione o atributo onunload com a chamada para a funo javascript que ser executada quando este evento ocorrer. A tag dever ficar parecida com o seguinte trecho:

ecode10 Supermark List - suas compras controladas no supermercado, baixe grti Apple Store - ecode10.com/artigo/1530/S via @ecode10
5 days ago reply retweet favorite

ecode10 Hotmail com nova cara ecode10.com/artigo/1528/Ho @ecode10


7 days ago reply retweet favorite

ecode10 Rumor iPhone 5 ecode10.com/artigo/1526/Ru @ecode10


9 days ago reply retweet favorite

ecode10 Visual Studio 12 RC - Novidade ferramenta - ecode10.com/artigo/1524/V via @ecode10


11 days ago reply retweet favorite

ecode10 Lenovo ThinkPad com Window ecode10.com/artigo/1523/Le @ecode10


11 days ago reply retweet favorite

<body onunload="finaliza();">

ecode10 [T-SQL] Count(1) x Count(PK) Count() ecode10.com/artigo/1521/T- @ecode10


12 days ago reply retweet favorite

Dentro das tags <head></head>, declare a funo javascript finaliza(), conforme o cdigo abaixo. Nele, utilizamos o objeto XMLHttpRequest, que o principal componente do AJAX e responsvel pelo conexo com o servidor Web. Como existem algumas diferenas na forma em que este objeto instanciado entre cada browser, fazemos vrias tentativas at que tenhamos um objeto vlido. Depois, chamamos o mtodo open() passando como parmetros o mtodo de acesso pgina (GET), a pgina que desejamos acessar (Finaliza.aspx) e um valor booleano indicando se a requisio assncrona. Quando passamos true neste parmetro, a chamada feita assincronamente. Isso significa que o processamento do script continuar, independentemente da resposta vir do servidor. Assim, o browser no bloqueia o acesso a pgina e o usurio continua trabalhando com ela normalmente. Se passssemos false, a chamada seria feita em modo sncrono, ou seja, o browser iria esperar a resposta do servidor web para dar continuidade a execuo do script. Enquanto a resposta no viesse, o usurio no conseguiria fazer mais nada na pgina, dando a sensao de travamento. Por ltimo, chamamos o mtodo send() para que o acesso seja feito.

ecode10 Podcast falando sobre seguran ecode10.com/artigo/1520/Po @ecode10


12 days ago reply retweet favorite

Join the convers

<script language="javascript" type="text/javascript"> function finaliza() {

2 de 5

18/06/2012 14:30

Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2

http://www.ecode10.com/artigo/337/Descobrindo+quando+o+usuario+...

var xmlHttp=false; try { xmlHttp = new XMLHttpRequest(); } catch (e1) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e2) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } xmlHttp.open("GET", "Finaliza.aspx", true); xmlHttp.send(null); } </script>

No Solution Explorer, clique com o boto direito do mouse sobre a pgina Pagina1.aspx e escolha a opo View in Browser. Para testar o funcionamento do que acabamos de fazer, acesse um outro site ou ento feche o browser. Aps uma dessas aes, v ao Control Panel do Windows Administrative Tools Event Viewer. Selecione o log Application e veja o log que foi gerado por nossa aplicao. Isso mostra que quando o evento onunload foi disparado por alguma ao do lado cliente, a funo javascript finaliza() chamou a pgina que desenvolvemos para forar a expirao da sesso, o que por sua vez gerou a chamada ao evento Session_End, que gravou a informao de sesso expirada no log de evento do Windows. Concluso Na segunda parte do artigo vimos como possvel acionar uma pgina no servidor web a partir de eventos ocorridos no cliente (browser). Assim, podemos detectar quando o usurio acessa um outro site ou ento quando fecha o browser. Tambm solucionamos o problema causado pela limitao do Session_End s ser chamado quando utilizamos o modo de armazenamento InProc. Entretanto, ainda temos um problema nessa soluo. Do jeito que foi implementada, sempre que outra pgina for acessada, a pgina Finaliza.aspx ser chamada. O evento onunload no faz distino entre pginas da mesma aplicao ou pginas de outros sites. Esse evento sempre chamado em resposta sada da pgina atual. Isso um problema, j que uma aplicao web normalmente composta de vrias pginas. Assim, ao acessarmos uma outra pgina de nossa aplicao, a sesso acabar sendo finalizada, o que no o comportamento correto. Na prxima parte deste artigo, explicarei como podemos contornar este problema e somente finalizar a sesso quando a aplicao for abandonada, e no a pgina.

Referncias Cdigo fonte do exemplo deste artigo http://www.aspneti.com/artigos/ExemploDetectarSaida.zip Gerenciamento de Estado no Servidor Parte 1 http://www.msdnbrasil.com.br /sharepedia/visualizarartigo.aspx?id=57763 Gerenciamento de Estado no Servidor Parte 2 http://www.msdnbrasil.com.br/sharepedia/visualizarartigo.aspx?id=57906

Dynamic HTML and XML: The XMLHttpRequest Object http://developer.apple.com/internet/webcontent/xmlhttpreq.html

Sobre o Autor

3 de 5

18/06/2012 14:30

Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2

http://www.ecode10.com/artigo/337/Descobrindo+quando+o+usuario+...

Ricardo Oneda Pereira de Toledo formado em Processamento de Dados pela Faculdade de Tecnologia de So Paulo, MCAD Microsoft Certified Application Developer, com nfase em aplicaes Web com C# e Banco de Dados SQL Server 2000 e MVP Most Valuable Professional em ASP/ASP.NET. Atualmente trabalha como Analista de Sistemas no desenvolvimento de aplicaes Web. Visite o blog em http://oneda.mvps.org/blog
voltar comente subir

Ricardo Oneda

Comentrios: Comentado por: Juan Carneiro - 28/2/2008 0:00:00 Ricardo, se quero que a sesso se mantenha no meu site. E somente seja zerada se o destino da url seja outro site ou o fechamento do navegador? Comentado por: Juan Carneiro - 28/2/2008 0:00:00 Simples resposta Juan, leia a parte 3. Comentado por: Roberta Franco - 4/11/2010 0:00:00 Ola eu estou usando master page na minha aplicao, como fazer neste caso? Comente (d sua opinio):

Comentrio:

Cdigo Imagem:

(digite o cdigo da imagem respeitando maisculo e minsculo)

Favor digitar o cdigo da imagem para cadastramento.

Outros Artigos do Autor


Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2 Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 3 Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 1

ecode10.com | Fale conosco | Quem somos | Clula acadmica | Anuncie aqui | RSS Tpicos / Artigos Apple Banco de dados C# (CSharp) ASP.NET VB.NET Novidades Mobilidade Automao comercial WebServices Diversos Empregos Frum Revistas Colaboradores Podcasts e-Books Vdeos Comunidade eCode10 Direitos autorais Cadastrar artigos Cadastrar notcias Cadastrar empregos Consultar empregos

Usurios

4 de 5

18/06/2012 14:30

Descobrindo quando o usurio sai de uma aplicao ASP.NET Parte 2

http://www.ecode10.com/artigo/337/Descobrindo+quando+o+usuario+...

Delphi Finanas Fisioterapia Java JavaScript LINQ TCP/IP Vdeos online Vrus / SPAM ASP 3.0 Arquitetura

Esqueceu a senha Quem somos Fale conosco Cadastre-se grtis

5 de 5

18/06/2012 14:30

Vous aimerez peut-être aussi