sexta-feira, 16 de novembro de 2001

Global.asa, Contador de page views e de usuários on-line

Em várias listas que sou assinante, vejo colegas em busca de uma solução para conhecer o total de usuários que estão acessando o site no momento. Este tipo de solução é bastante simples de ser implementada através do arquivo globa.asa.

O arquivo global.asa deve ser salvo no diretório raiz do site. É de boa prática, ter apenas um arquivo global.asa por aplicativo.

O objetivo será de criar um simples contador de page views e também um contador para usuários on-line. Abaixo, o script de nosso global.asa.

Arquivo Global.asa
*******************************************************
<SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER>

Sub Application_OnStart
      Application("intTotUser") = 0
      Application("datServerUp") = Now()
      Application("intTotOnLine") = 0
End Sub

Sub Application_OnEnd
End Sub

Sub Session_OnStart
      Session.TimeOut = 10
      Application.Lock
            Application("intTotUser") = Application("intTotUser") + 1
            Application("intTotOnLine") = Application("intTotOnLine") + 1
      Application.Unlock
End Sub

Sub Session_OnEnd
      Application.Lock
            Application("intTotOnLine") = Application("intTotOnLine") - 1
      Application.Unlock
End Sub

</SCRIPT>

*******************************************************

:::::::::::::EXCLARECENDO AS DÚVIDAS:::::::::::::

-------------------------------------------------------
Sub Application_OnStart
      Application("intTotUser") = 0
      Application("datServerUp") = Date()
      Application("intTotOnLine") = 0
End Sub

-------------------------------------------------------

O procedimento Sub Application_OnStart somente é executado uma única vez após a primeira requisição atendida pelo aplicativo.

O ASP executa automaticamente o procedimento Sub Application_OnStart toda a vez que o aplicativo é iniciado. Exemplo: O servidor web é reiniciado, e em seguida um navegador requisita uma página do aplicativo.

Neste caso, o procedimento Sub Application_OnStart é executado e três novas variáveis Application serão criadas:

-------------------------------------------------------
Application("intTotUser") -> Nesta variável será armazenado o total de usuário que acessaram o site desde a ultima vez que o servidor web foi reinicializado.

Application("datServerUp") -> Nesta variável será armazenada a data da primeira requisição atendida pelo aplicativo.

Application("intTotOnLine") -> Nesta variável será armazenado o total de usuários que estão acessando a aplicação no momento.

-------------------------------------------------------
Sub Session_OnStart
      Session.TimeOut = 10
      Application.Lock
            Application("intTotUser") = Application("intTotUser") + 1
            Application("intTotOnLine") = Application("intTotOnLine") + 1
      Application.Unlock
End Sub
-------------------------------------------------------

O procedimento Sub Session_OnStart será executado toda a vez que uma nova sessão é criada.

Neste caso, foi usado esse procedimento para incrementar a variável Application "intTotUser" e "intTotOnLine". Toda a vez que uma nova sessão for criada, as variáveis Application serão incrementadas de um.

Observe que foi usado o método "Lock" e "Unlock" do objeto Application. Esses métodos já foram explicados em um artigo já publicado, mas para relembrar: O método "Lock" é usado para garantir que dois usuários não atualizem a mesma variável ao mesmo tempo. E "Unlock", é usado para liberar a variável e permitir uma nova atualização.

-------------------------------------------------------
Sub Session_OnEnd
      Application.Lock
            Application("intTotOnLine") = Application("intTotOnLine") - 1
      Application.Unlock
End Sub

-------------------------------------------------------

O procedimento Sub Session_OnEnd é executado toda a vez que uma sessão é finalizada pelo servidor. Um dos eventos poderia ser: 1) Foi usado o método Abandon do objeto Session 2) Tempo de inatividade da sessão foi atingida 3) O navegador foi finalizado.

Neste caso, foi usado este procedimento para subtrair 1 (um) da variável Application "intTotOnLine". Desta forma será possível saber a quantidade exata de usuários conectados à aplicação.

O procedimento Sub Application_OnEnd é executado toda a vez que a aplicação é finalizada. Não é comum você ver procedimentos neste evento, isso porque executar um evento depois que o aplicativo e finalizado está fora do escopo de produção. Um bom uso talvez deste evento seria para registrar em log a data e hora que o aplicativo foi finalizado.

SCRIPT PARA MOSTRAR O RESULTADO
-------------------------------

script_001.asp
*******************************************************
<%Response.Buffer=True%>

<html>
<head>
<title>Acessos On-Line</title>
</head>
<body>

<%
Dim intSessionId
intSessionId = Session.SessionID

Dim intTotOnLine
intTotOnLine = Application("intTotOnLine")

Dim intTotUser
intTotUser= Application("intTotUser")
%>

<p><b>Sessão Identificada:</b> <%=intSessionId%></p>
<p><b>Informações úteis:</b></p>
<p><b>Usuários On-Line:</b> <%=intTotOnLine%></p>
<p><b>Total de acessos até o momento:</b> <%=intTotUser%></p>
<p><b>Data da última inicialização:</b> <%=datServerUp%></p>

</body>
</html>

*******************************************************


Boa Programação!


Esta matéria foi postada originalmente no ASP4Developers por Leonardo da Silva Calado (site), que na época era "Usuário avançado de Dreamweaver ultradev e programador ASP, JSP, PHP, VISUAL BASIC e Condfusion.
tenho preferência por ASP uma linguagem de facil aprendizado.". Hoje, vai saber...

0 comentários: