Contar usuarios activos

  • Por
Vemos un ejemplo de Global.ASA que nos sirve para contar los usuarios activos que tenemos en un sitio web en un momento dado.
Podemos ver un ejemplo de global.asa utilizado para llevar el control de los usuarios que acceden a la página web. La cuenta nos informa del número de usuarios que están activos en el sitio, es decir del número de sesiones abiertas.

Referencia: El archivo global.asa, su utilidad y funcionamiento, ha quedado resumido en otro taller de ASP. http://www.desarrolloweb.com/articulos/295.php?manual=11

<SCRIPT LANGUAGE=VBScript RUNAT=server>

sub application_onStart()
'sentencias que se ejecutan al entrar el primer usuario
application("num_usuarios")=0
end sub

sub session_onStart()
'sentencias a ejecutar al irse el último usuario
application.lock
application("num_usuarios") = application("num_usuarios") + 1
application.unlock
end sub

sub session_onEnd()
'sentencias que se ejecutan cada vez que entra un usuario
application.lock
application("num_usuarios") = application("num_usuarios") - 1
application.unlock
end sub

</SCRIPT>


Es muy fácil de entender, cuando de inicia la aplicación se inicializa a cero la variable que cuenta el número de usuarios activos. No es necesario bloquear el objeto application porque en este momento no se tiene procesos concurrentes que pudiesen estar modificando la aplicación, por que aun no ha llegado nadie. En el inicio de una sesión se incrementa en uno el número de usuarios y en el fina se decrementa en uno. No hace falta definir acciones al acabar la aplicación porque la variable de aplicación que guarda el numero de usuarios desaparece sola al acabar la aplicación.

Visualizar el número de usuarios

Ahora, si deseamos ver el número de usuarios en cualquier momento lo único que tendremos que hacer es sacar en la página el contenido de la variable de aplicación que cuenta el número de usuarios, en un script parecido al siguiente.

<html>
<head>
<title>Muestro usuarios activos</title>
</head>

<body>
<h1>Usuarios activos
<%
application.lock
response.write application("num_usuarios")
application.unlock
%>
</h1>

</body>
</html>


No tiene tampoco ninguna dificultad. Si queremos lo podemos probar en nuestro ordenador. Ya sabemos que el global.asa se coloca en el directorio raíz de una aplicación o en un directorio virtual que hayamos creado con un servidor como Personal Web Server. Si queremos ver como se incrementa el número de sesiones sin necesidad de que otros usuarios se conecten podemos entrar en la página con navegadores distintos y se tomarán como sesiones distintas aunque el ordenador desde donde se accede es el mismo.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

chucho

01/4/2002
Entiendo esto del contador, pero lo he intentado varias veces y no lo he logrado.
Puede que sea el servidor?

Respuesta

No se si lo será, con estos datos es dificl hacerse una idea. Sin embargo, puedes ver si tu proveedor soporta los global.asa, porque si no es así, ya tienes la respuesta.
Otra cosa que puede fallar es que los global.asa a veces sólo se ponen en funcionamiento si se reinicia el servidor o el servicio, cosa que no ocurre todos los días en un proveedor de hosting. Es por ello que las modificaciones en dicho archivo pueden no hacerse patentes hasta pasado un tiempo.

Nicolás

31/5/2002
A mi tampoco me funciona, el servidor que uso es www.cfm-resources.com, que ofrese asp gratis.
Que es el Global.ASA?

Respuesta:

El ejemplo está probado y vuelto a probar. Funciona bien, pero no se si vuestro proveedor permite el trabajo con el global.asa. Por cierto hemos explicado lo que es en nuestro taller de asp, en esta dirección:
http://www.desarrolloweb.com/articulos/295.php?manual=11

Otra cosa, las modificaciones en el global.asa no tienen porque verse instantáneas.

miguel angel

11/9/2002
Funciona pero como hacerle para que al visitante numero 1 le actulize cuando mas han entrado. Osea yo me conecto a otra maquina y me dice que soy el 2 pero en la mia me sigue diciendo que solo hay 1.

Respuesta

Al actualizar la página que te dice que solo hay un usuario (Después de que entre el segundo) debería decirte ya que los usuarios conectados son dos.

Fr@Nc3$c0

12/10/2002
He probado esto con el global.asa. Mis diferentes tests marcan lo mismo. La carga de usuarios es correcta, abro diferentes navegadores (5) y tengo 5 usuarios activos refrescando las ventanas abiertas.

Pero el problema llega cuando quiero ver restar los usuarios activos, cierro 4 navegadores, y en la restante la refresco (F5) ésta sigue teniendo 5 usuarios activos (de las ventanas anteriores.

Esta prueba la he realizado en local (ISS) y con proveedor ASP. El resultado ha sido el mismo, puede ayudarme para que reste como es debido?

RESPUESTA

Resulta que las restas se producen cuando finalizan las sesiones. Aunque cierres el navegador, el servidor no se entera de ello y hasta que la sesión de ese usuario no caduca (por defecto a los 20 minutos) no se resta el usuario.

Puedes hacer una prueba para ver si al cerrar la sesión se resta o no ese usuario creando una página que cierre la sesión automáticamente, con session.abandon

Ruben

05/11/2003
El codigo funciona correctamente y es muy sencillo, gracias.

Añadir para el usuario que se quejaba de finalizar la session de que existe una variable para el global asa, que siempre puede ser modificada desde cualquier pàgina de asp que és la Session.Timeout a la cual podemos darle el valor del numero entero de minutos que queremos que dure una session (internacionalmente por defecto 20 minutos).

Añadir tambien que yo para una aplicación para una empresa, me interesaba saber que usuarios eran los conectados, por eso al iniciar session en la tabla de usuarios tenia un campo boleano "conn" en que el se ponia a true al iniciar session y se ponia en false al finalizarla, de esta forma haciendo una select where conn=true me decia los usuarios activos.

Saludos y enhorabuena por los articulos, un lugar de p--- madr- con todos esos consejos que no salen en ningun libro de programación ;).

Ada

27/12/2007
Lo mismo que Francisco. Quiero ver que se resten las sesiones y no resulta. Estoy en iis 6.0 y tengo una pagina para cerrar sesión con el comando Session.Abandon() y no resta las sesiones. ¿Alguien sabe que puede ser? Tambien probe dejar en 5 minutos el tiempo de sesion dentro de las propiedades del iis pero de todas maneras continua la sesion.

Saludos

Trash

01/3/2011
Agrego una Tontera
Los contadores de usuarios están invertidos, o bien los comentarios.
jajaja Esto es solo para que dejen de preguntar porque no suma o resta jajaj
Excelente SITIO de aprendizaje, cuando me pare económicamente, voy a DONAR cifras importantes para OPEN SOURCE y este ESPLÉNDIDO SITIO.