Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Revistas
Empregos
Colaboradores
Vdeos
Podcast
Frum
Cadastrar Artigos
Mobilidade
Cadastrar Notcias
Automao Comercial
Cadastrar Empregos
WebService
Consultar Empregos
Podcasts
Novidades
Banco de Dados
Busca Online:
Torne-se autor do site escrevendo artigos e ebooks, criando vdeos e podcast's. Veja tambm os nossos vdeos publicados gratuitamente.
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
Microsoft Translator
ecode10
ecode10
1 de 5
18/06/2012 14:30
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 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
<body onunload="finaliza();">
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.
2 de 5
18/06/2012 14:30
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
Sobre o Autor
3 de 5
18/06/2012 14:30
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:
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
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
5 de 5
18/06/2012 14:30