Início > Asp.net > Chamar Evento Server Side ao fechar a janela do Browser

Chamar Evento Server Side ao fechar a janela do Browser

21 de julho de 2009 Deixe um comentário Go to comments

Boa noite,

Hoje irei falar de uma dica bem interessante, trata-se de um evento Server-Side para pegar o momento em que a janela do browser esta sendo fechada. Na internet se você der uma pesquisada, irá encontrar vários exemplos de como utilizar script´s nas páginas web e pegar o evento (closing) da mesma, no entanto, imagine o seguinte cenário:

– Você possui um site que grava a sessão no banco de dados (veja aqui no blog como fazer) e no seu ambiente existe a necessidade de pegar o inicio e fim da sessão. O timeout da sessão de seu site foi configurado com 20 minutos. Você cria uma classe que recebe os parâmetros de Inicio e Fim da sessão através de parâmetros, e grava no banco de dados. O primeiro acesso do usuário você percebe que o inicio (data/hora) foi a data da criação do registro e que o fim da sessão foi (data de inicio + tempo de timeout), no entanto seu usuário não ficou mais de 3 minutos conectado no site ou seja, ele entrou, viu a informação que gostaria e finalizou a página(fechou a janela do browser), e no banco de dados o valor continua o mesmo. Você então insere o método para atualizar a sessão no Global.asax (veja: http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx) , e mesmo assim o valor ainda não esta sendo alterado no banco, então você (finalmente neh..rs) faz um debug da sua aplicação e percebe que ao fechar a janela em nenhum momento esta sendo chamado algum evento Server-side, e você se pergunta como fazer ? É bem simples, lembra-se que estes eventos são controlados no Client-Side, por isso, nenhum evento server-side é acionado, para resolver esta situação podemos escolher N soluções, no entando irei citar uma mais simples neste post.

Nos iremos utilizar o EnablePageMethods introduzido no ASP.NET 2.0  – AJAX 1.0 Extensions, para fazer insira na sua página o seguinte comando:

 

1-) Insira na página o ScriptManager, e habilite o EnablePageMethods do mesmo, conforme o exemplo abaixo:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"/>

 

2-) Crie o script que irá chamar a função:

<script language="javascript" type="text/javascript">

        function HandleClose() {

            alert(‘foi chamado a função’);

                    PageMethods.AbandonSession();
}
</script>

 

3-) Na tag Body de sua pagina insira a tag para chamar o função (javascript) no momento do Onunload, conforme código abaixo:

<body onunload="HandleClose()" >

 

4-) Para finalizar crie um método dentro do seu code-behind que tenha o atributo [WebMethod], e dentro deste método insira a operação desejada.

 [WebMethod]

 public static void AbandonSession()

 {

     //Insira aqui sua função:

     HttpContext.Current.Session.Abandon();

  }

Obs: Neste exemplo além de pegar as informações, estamos garantindo que a sessão esta sendo finalizada através do método abandon().

 

Para melhorar mais a qualidade deste exemplo, você poderá utilizar o mesmo em uma estrutura de MasterPage, na masterpage insira os códigos javascript e as tag´s HTML, crie uma pagina base, e faça com que todos web-form content da masterpages herdem desta pagina base, assim você irá centralizar os scripts e o método.

 

Simples não ??!!, um grande abraço e até mais.

 

Nelson Borges

Categorias:Asp.net
  1. Jefferson Araujo
    2 de setembro de 2011 às 14:50

    Cara, muito bom mesmo, simples e funcional. Parabéns.

  2. Junior
    14 de março de 2012 às 10:08

    Nelson, estou tentando fazer isso que vc falou em uma estrutura de master page, já tenho o sistema todo funcionando coloquei os códigos na master page e tb no codebehind dela mais qdo vou para outras páginas da erro de execução no script
    “pagemethod não esta definido” o que pode ser ?

  3. Carlos Ferraz
    10 de agosto de 2012 às 16:07

    Está acontecendo o mesmo problema comigo. Alguém tem a solução?

  4. 28 de agosto de 2012 às 14:44

    Também não consegui usar esse método no masterpage. Alguém já deu conta de fazer no masterpage?

  5. 6 de março de 2013 às 9:52

    Muito bom !!

  1. No trackbacks yet.

Deixe uma resposta

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 )

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s

%d blogueiros gostam disto: