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!
tenho preferência por ASP uma linguagem de facil aprendizado.". Hoje, vai saber...
0 comentários:
Postar um comentário