Contando usuarios activos con ASP
Un tutorial para implementar código ASP que nos permita contar los usuarios activos de un sitio
Una
forma práctica de conocer y compartir datos sobre la interacción
de los usuarios con un sitio es listar los usuarios o sesiones activa. A
diferencia de otros protocolos del Web como conexiones FTP, email, Telnet,
etc. que registran una conexión desde el momento que el usuario la solicita
hasta que se desconecta del servicio, el protocolo HTTP es diferente. Cada
vez que el usuario visualiza una página en su navegador, este realiza una
conexión individual por cada uno de los archivos que componen la página. Así
si por ejemplo, al solicitar este documento, nuestro navegador probablemente
se conecto y desconecto varias veces al servidor donde reside Maestros del
Web descargando el archivo HTML que forma la página y cada uno de los archivos
gráficos que están incluidos. Entonces con el protocolo funcionando de esta
forma, no es tan sencillo contar a los usuarios ya que no podemos contar el
tiempo que pasen leyendo un documento, ni mucho menos saber si van a ver otro
documento hasta que efectivamente lo hagan.
Con la ayuda de ASP podemos utilizar
sesiones del usuario para ir contabilizando los visitantes actuales de un
sitio web.
Las Sesiones son un objeto en ASP que le asigna un espacio temporal de almacenamiento
de información a cada visitante del sitio. Esto se implementa por medio de
Cookies sin propiedades de expiración asignada, por lo que permanecen en la
computadora del usuario hasta que cierra su navegador. La única desventaja
radica en que no todas las personas navegan con la opción de Cookies activadas,
por lo que esto podría cancelar la sesión y arruinar nuestro contador. Por
otra parte, el uso de Cookies ya se está generalizando y casi todos los navegantes
las utilizan en sus navegadores.
Luego de haber comentado respecto a las sesiones, vamos a platicar sobre un
archivo bastante popular dentro de los desarrolladores de ASPs. El archivo global.asa es aquel donde se define una
aplicación web dentro del Internet Information Server. Este archivo contiene
códigos manejadores de eventos como lo son Application_OnStart, Application_OnEnd, Session_OnStart y Session_OnEnd. Los dos primeros con el
prefijo Application_ se manejan dentro del servidor
y se activan cuando se solicita el primer archivo .asp, terminando al apagar
el servidor. Luego, los dos con el prefijo Session_
que son los que nos interesan se manejan por cada usuario. Así cuando una
persona solicita un archivo .asp en el sitio, el Session_OnStart se inicia y el Session_OnEnd que es el que finaliza la
sesión puede ser terminado de dos formas: La primera es por medio de la ejecución
de un script y la segunda por asignación de tiempo.
Así que una vez explicado el funcionamiento de las Sesiones en ASP y como
podemos manipularlas en el archivo global.asa,
pasemos a lo práctico:
1. <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> 2. 3. Sub Application_OnStart 4.Application("ActiveUsers") = 0 5. End Sub 6. 7. Sub Session_OnStart 8. Session.Timeout = 20 9.Session("Start") = Now 10. Application.Lock 11. Application("ActiveUsers") = Application("ActiveUsers") + 1 12. Application.UnLock 13. End Sub 14. 15. Sub Session_OnEnd 16. Application.Lock 17. Application("ActiveUsers") = Application("ActiveUsers") - 1 18. Application.UnLock 19. End Sub 20. 21. </SCRIPT>
El código anterior sería los contenidos
de nuestro archivo global.asa localizado en el directorio
principal de nuestro servidor virtual.
Ahora para explicar lo que sucede en
estos scripts:
En la línea 1,
tenemos el inicio del tag del script que nos menciona el lenguaje que utilizaremos
y asigna que se ejecutará en el servidor.
En las líneas 3, 7 y 15 se encuentran las aperturas de los scripts Application_OnStart, Session_OnStart y Session_OnEnd. Como notarán Application_OnEnd no aparece en el código
pues no es necesario utilizarlo.
La línea 4 le asigna a nuestra variable de aplicación ActiveUsers un valor de 0 cada vez que
el servidor arranca. La asignamos como aplicación para que todas las sesiones
puedan captar su valor y manipularla.
En la línea 8 definimos el tiempo que durará cada sesión, siendo 20 minutos el valor predeterminado.
Es muy importante tomar en cuenta que cada usuario tendrá una sesión de 20 minutos,
por lo que de no cargar nuevos contenidos de nuestro sitio en 20 minutos ya
no será tomado en cuenta y se ejecutarán los contenidos de Session_OnEnd.
La línea 9 es solo una forma de asegurar que la sesión inicie por cada usuario conectado,
ya que aunque el usuario soporte cookies en su navegador, la sesión podría no
ser tomada en cuenta.
En la línea 11 hacemos funcionar el contador. Por cada nueva sesión, se suma una unidad a nuestra
variable ActiveUsers. Finalmente en la línea 17 por cada sesión que expira se va restando una unidad a nuestra variable. Las líneas 10,
12,
16
y 18 abren y cierran la aplicación. Esto es un procedimiento de seguridad ya que
si varios usuarios tratan de modificar el valor de la variable simultáneamente
podría causar errores.
Todo el código que ya repasamos nos da por resultado la variable de aplicación
ActiveUsers. Este valor es el número de
sesiones activas en el servidor, lo que representará el número de usuarios activos.
Como pudieron ver en el proceso esta variable no
representa el número exacto de usuarios viendo las páginas, pero si las sesiones
abiertas, por lo que es casi lo que queríamos.
Luego de haber obtenido este valor, basta con incluir la siguiente línea de
código en todas las páginas .asp donde queramos ejecutar el resultado:
<%= Application(“ActiveUsers”) %>
Esta línea imprimirá el número de sesiones que actualmente hay en el sitio.
Como ven no fue tan difícil. Espero que este artículo les haya sido de utilidad.
Estaremos incluyendo nuevos talleres de ASP en el futuro, por lo que esperamos
sus comentarios.
:stress:
Segui las instrucciones paso a paso y no me muestra los usuarios activos
Algún error en específico? Incluiste el global.asa en el directorio principal de tu sitio? Permiten el uso de global.asa en tu hosting?
esta interesantisimo…como puedosaber qué usuario está conectado y si se esta ocupando el mismo login y password en dos sesiones a la vez?
Hago un archivo asi tal cual, Global.asa????
pongo dentro el codigo que nos dan en el ejemplo????
lo subo al servidor????
Dentro de mi pagina, meto el codigo de referencia a ActiveUsers.asp????
Y funcionara????
saludos
Muy simple, gracias.
Muy bueno y explicativo. Lástima no haya más.
Hola
Estoy probando el codigo que indicais para los usuarios activos pero tengo un problema y es que no se ejecuta el codigo del session_OnEnd.
Por lo que he visto, no soy el unico con este problema, tanto en cosas simples como esta como en otro tipo de codigos.
¿A que puede ser debido esto?
Gracias de antemano
una preguntita (es tonta, lo se!), pero para que se inicie la sesion en una pagina asp con un formulario en el que te piden el nombre y la clave, comprueban si existe en la base de datos, luego como haces que inicie la sesion?
Por fa contexta es muuuu importante
Gracias
Muy bueno lo buscaba desde hace tiempo, gracias.
No merece la pena, vaya solución! jajajaja.. eso tiene más años que el sol de agosto.. pa morirse..
esta muy el codigo nada mas tengo una pregunta yo ya hice lo del contador de usuarios activos pero lo que quiero que al momento de recargar la pagina no me incremente el valor del contador sino me que me mantenga el valor que tiene para ese usuario y no lo incremente cuando otro ingresa a mi pagina
he probado pero no me aparece nada
Muy bueno sin duda, desde luego que lo utilizaré, no he leido mucho más pero me gustaría saber sino es mucho pedir como hacer para mostrar ya no el numero sino el nombre de dichos usuarios almacenado en una variable de session, gracias
lo probe no aparece nada
Muy bueno y bien explicado, pregunta, puede ser compatible con Html
gracias por el poyo propocionado
me fue de mucha utilidad
Totalmente compatible Rasago, en mi pagina utilizo simultaneamente asp y html, el codigo asp se diferencia por ir entre < % %>
http://www.hexplore
anda q menudo soy… http://www.hexplore.tk sorry
La verdad que muy bueno y muy facil, gracias por este tutorial..!!!!
No funciono este ejemplo no me muestra nada
..
no funciono este ejemplo…
puedo poner en el global.asa un acceso a base de datos?
Es para que cuando el usuario entre guarde su nº de sesion en una db y cuando salga lo ponga a 0, asi se los nombres de los usuarios que están en un momento dado en mi sitio.
Si el articulo está muy bien, si quieres usarlo en una máquina local o un servidor propio, pero cuando usas un servidor de esos gratuitos o de otra gente, no se suele tener acceso al global.asa, ya que no hacen carpetas virtuales, o no puedes tener tus propias variables, si alguien tiene alguna alternativa…..
Gracias
Si funciona, pero si el usuario cierra el navegador en vez de salir de la sesion no resta el usuario, como puedo restar al usuario activo si este cierra el navegador
Hola, el codigo no me funciona del todo bien, y es porque no resta en el Session_OnEnd() , tengo el timeout a 5 pero si cierras la página y vuelves a abrirla te suma uno pero no te resta ninguno y eso es un poco contradictorio ya que si se cierra la sesion te deberia restar como la sesion se cierra cuando pasa el timeout explicaria que no lo restara pero porque lo suma si la session esta abierta como puede ejecutar el Session_OnStart().
Agradeceria algun comentariio o ayuda
Hola, tengo este contador en mi pagina index.asp, y me funciona muy bien, pero mis demas paginas son html, mi pregunta es: este contador tambien cuenta a los que entran directamente a lugares html sin pasar por el asp?
Tu articulo es bastante interesante, pero tengo un problema mi servidor que es gratis web no me admite archivos asp, y lo ke yo kiero es saber cuantos usuarios estan en linea en cierta pagina y que el resultado me lo publique en otra pagina de mi web, espero me puedas ayudar, a por cierto si entras a mi web tiene una pekeña broma en la entrada no le hagas caso a todo dile ke si no es dañina, si me puedes contactar via msn te lo agradeceria para que me ayudes con mi problema, mi msn es [email protected]
de ante mano mil gracias
// http://www.gratisweb.com/lawebdemiky/ //
Como puedo evitar el doble logueo ?
Muy Simple, Muchas Gracias
quisiera saber si lo puedo poner en una pagina html enviame la informacion por favor
Como lo hago para mostrar los datos de todos los que iniciaron session…
Vay atodavía en el 2006 me da problemas el evento Session_onEnd
ASp es una basca
Sabran como meter un contador de tiempo (cronometro)
Como utilizo el archivo global.asa para definir el numero de sesiones que se pueden abrir, dependiendo de una prioridad de entrada
Habra algun modo de contar los visitantes activos sin usar el global.asa, para todos aquellos que no pagamos hosting?
// http://www.aafenlared.gt.tc //
esta feo
esta feo
Nadie comento sobre como resolver on session end
He puesto el fichero global.asa en el directorio principal del servidor.-
¿Hay que llamar a este fichero del algun modo??
Esta instruccion insertada en la pagina me da error:
Siento no saber mas pero es lo que hay.-
¿Me podeis hechar una mano???