Quantos são e quem são os usuários online?
Qual o tempo médio de navegação por usuário?
Quais são os horários de maior atividade?
Qual o máximo de usuários navegando simultaneamente?

Os procedimentos utilizados no Sistema Monitor aqui descrito não são necessariamente os melhores em código ou performance. São, no entanto, o que considerei (segundo meu próprio julgamento) ao alcance da maioria dos usuários. Aqueles que esperam apenas “código mastigado” dificilmente farão proveito desse artigo. Um outro detalhe importante é que estou fazendo uso do Global.asa. Mais tarde vou escrever uma adaptação para quem não pode utilizar global.asa (normalmente em hospedagem gratuita).O primeiro ponto a ser abordado será a contagem, pura e simples, dos usuários online. Isso é possível através das “Subs” Session_OnStart e Session_OnEnd (no global.asa), conforme descrito abaixo. Inicialmente você deverá ter definido uma variável Application no Application_OnStartSub Application_OnStart
    Application(”Max”) = 0
    Application(”OnlineVisit”) = 0
End Sub
Sub Session_OnStart
    Application(”OnlineVisit”) = Application(”OnlineVisit”) + 1
    if Application(”OnlineVisit”) > Application(”Max”) then
         Application(”Max”) = Application(”OnlineVisit”)
    End if
End Sub
Sub Session_OnEnd
    Application(”OnlineVisit”) = Application(”OnlineVisit”) – 1
End Sub
Session_OnStart é executada a cada vez que uma sessão é iniciada, o navegador é “instanciado”. A Session_OnEnd é executada a cada encerramento de sessão, e isso pode ocorrer de 2 maneiras.

a)     Através de Session.Abandon. Se existe um botão “fim” e o desenvolvimento foi correto, haverá uma “chamada” a Session.abandon. O navegador será fechado, ou haverá redirecionamento para página padrão…

b)     Não ocorreu nenhum “request” nos últimos “n” minutos, sendo “n” o valor de Session.TimeOut. é muito utilizado por quest?de segurança, e o valor padrão é 20 (minutos). Se o usuário simplesmente fechar o navegador (como normalmente acontece), a sessão expirará pelo tempo, e Session_OnEnd será executada.

Até aqui podemos saber, com uma pequena margem de erro (podemos até mesmo desconsiderar, uma vez que o s servidor precisa tratar a sessão até sua expiração) o número de usuários online, mas ainda não podemos saber QUEM são eles.Esse é o segundo ponto, e para isso vamos utilizar uma tabela de um banco de dados, lembrando que não é necessariamente a melhor opção quanto à performance, mas sim quanto ao entendimento, à didática.Vamos identificar o usuário pelo Session.SessionID, gerado a cada sessão. É um identificador único, podendo ser utilizado como chave primária, diferente do IP, que pode ser compartilhado. E ainda há a possibilidade, muito comum, de um mesmo usuário, em uma mesma máquina, abrir o mesmo site várias vezes. Por essa razão, não podemos utilizar o IP como identificador do usuário.Essa tabela contará, para nosso simples exemplo, com um campo SessionID (numérico), e outro DtLastMov (Data&Hora).Uma vez que o usuário faça o acesso à primeira página (e isso deve ser tratado, pois o usuário já tarimbado pode ir diretamente à página que deseja), seu SessionID deve ser inserido, juntamente com a Data & Hora. A cada novo request (mudança de página ou “submit” de formulário são casos típicos) o registro com seu SessionID deve ser atualizado com now().Uma vez que Session_OnStart e Session_OnEnd nos informam o número de usuários online, se fizermos um select to tipo… sql = “SELECT TOP ” & Application(OnlineVisit) & ” * FROM tabela ORDER BY DtLastMov DESC”… saberemos exatamente QUEM está online! Um campo IP pode ser utilizado ou USER (para sites que cadastram usuários), ou mesmo a combinação de ambos. é possível saber quem são os usuários logados e quem são os visitantes.Se somarmos “n” minutos, sendo n o valor de Session.TimeOut ao último movimento de cada usuário podemos ter o tempo que cada um ficou online.Vamos ver como podemos trabalhar com soma e subtração em campo Data & Hora. Utilizaremos, inicialmente, a função now()Now() + 1 = Data&hora atual + 1 dia
Now() + (1/24) = Data&hora atual + 1 hora

Now() + (1/24/60) = Data&Hora atual + 1 minuto
Com DateDiff(”n”, DataHora1, Datahora2) calculamos o intervalo, em minutos, de duas variáveis “datahora”. é importante que os segundos serão desconsiderados. Por exemplo:DateDiff(”n”,d1, d2) retornará 3.Uma vez calculado o tempo individual, podemos obter facilmente a média (um pouco de matemática, não mais ASP), além de detalhes como horas de maior tráfego e o que mais o desenvolvedor achar por bem. é importante lembrarmos que o ASP é tão din⭩co quanto nós pudermos ser. A limitação é nossa própria criatividade e capacidade de analisar dados. O número máximo de visitantes já está sendo tratado em Application(”Max”), no Global.asa, e para que o proposto acima funcione corretamente é necessário tratar cada movimento do usuário. A utilização do Global.asa e as duas variáveis Application são suficiente para saber quantos são os visitantes do momento. A implementação do QUEM tem um certo custo e é necessário que cada movimento do usuário seja rastreado. Você poderá, assim, tratar seus usuários cadastrados e visitantes…Vimos com um bom nível de detalhamento a teoria para a criação de um sistema monitor.