none
Como registrar entrada e saída numa aplicação Web? RRS feed

  • Pergunta

  • Salve!

    No departamento em que trabalho temos um portal com links para várias das aplicações que desenvolvi. Estas rodam num servidor IIS 7.

    A gerência do departamento está querendo uma estatística do uso de algumas das aplicações, tipo quando o usuário entrou numa aplicação e quando saiu.

    Bem, o quando entrou é tranquilo. O galho é o quando saiu da aplicação. Como consigo registrar que o usuário não está mais na aplicação (que pode ter várias páginas)?

    Qual a melhor maneira de ter essa estatística de uso da aplicação? Será que já tem algo no IIS 7 pra atender a isso?

    Grato pela atenção de todos.

    Paulo Ricardo Ferreira

    segunda-feira, 30 de setembro de 2013 16:39

Todas as Respostas

  • Quando o usuário fechar o navegador não é disparado nenhum evento de servidor, por isso nativamente não tem como saber no ASP.NET quando ele fechou o navegador...

    Mas no lado do cliente TEM !!!

    Antes de fechar o navegador é disparado o evento OnbeforeUnload, mapeia esse evento da Janela e dispara um POST com AJAX pra salvar a data e hora que ele fechou...


    Leonardo Lourenço Silva


    segunda-feira, 30 de setembro de 2013 16:45
  • Caro Leonardo,

    Antes de ler ver a sua sugestão eu estava fuçando o Fórum e vi uma sugestão de 2009 que achei que poderia aplicar tranquilamente nas minhas aplicações, já que todas as minhas aplicações usam MasterPage.

    Então, na tag <head></head> do SourceCode da MasterPage incluí o código abaixo:

    <script language="javascript" type="text/javascript">
        window.onbeforeunload = function()
        {
            if((window.event.clientX<0) || (window.event.clientY<0))
            {
                window.open("~/Logout.aspx", "fechar");           
            }
        }
           
        document.onkeydown = Verificar;
           
        function Verificar()
        {   
            var tecla=window.event.keyCode; //tecla normal
            var alt=window.event.altKey; // Para Controle da Tecla ALT
            var ctrl=window.event.ctrlKey; // Para Controle da Tecla CTRL
               
            if (alt && tecla==115)  // Evita fechar via Teclado
            {           
                alert("Para sair do sistema clique em SAIR !");           
                event.keyCode=116;
                event.returnValue=false;           
            }       
            if (ctrl && tecla==78)
            {
                alert("CTRL+N bloqueado");
                event.keyCode=0;
                event.returnValue=false;
            }   
        }
    </script>

    Criei também a página Logout.aspx e no evento Load desta página chamei o método para registrar no banco de dados a saída do usuário.

    Repara que a função javascript mapeia justamente o evento que você mencionou, onbeforeunload. Só que não funcionou nada.

    Onde errei?

    Grato pela sua atenção.

    Paulo Ricardo Ferreira


    segunda-feira, 30 de setembro de 2013 18:46
  • Cara faz um teste ae, no Head da Master coloque o código abaixo e teste pra ver se está passando...

    <script language="javascript" type="text/javascript">
        window.onbeforeunload = function()
        {
            alert("Passou");
        }
    </script>


    Leonardo Lourenço Silva


    segunda-feira, 30 de setembro de 2013 18:55
  • Caro Leonardo,

    Executei a sua sugestão e a aplicação passou na função e executou o alert.

    Por que será que não executa a abertura da página Logout.aspx (que tem o código abaixo)?

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        If Not IsPostBack Then
    
            Dim bll As New Controle_de_Acesso.BLL.Acessos
            bll.RegistrarSaida(Session("nomeUsuarioSaudacao"))
        End If
    End Sub
    

    Tem algo a ver com a forma como estou mandando abrir a página?

    window.open("Logout.aspx", "fechar");

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    segunda-feira, 30 de setembro de 2013 19:08
  • Tente fazer 2 testes...

    1. Coloca devolta o window.Open e testa pelo IE, Chrome e Firefox
    2. Substitui o evento OnBeforeUnload para OnUnload


    Leonardo Lourenço Silva


    segunda-feira, 30 de setembro de 2013 19:20
  • Caro Leonardo,

    Não houve qualquer alteração.

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    segunda-feira, 30 de setembro de 2013 19:26
  • Estou no celular, chegando em casa já testo e te falo !!!

    Leonardo Lourenço Silva


    segunda-feira, 30 de setembro de 2013 19:30
  • Antes de fechar o navegador é disparado o evento OnbeforeUnload, mapeia esse evento da Janela e dispara um POST com AJAX pra salvar a data e hora que ele fechou...

    Caro Leonardo,

    Como disparo esse POST com AJAX para poder chamar o meu método que vai registrar a saída do usuário?

    Grato pela atenção.

    Paulo Ricardo Ferreira
    terça-feira, 1 de outubro de 2013 19:07