Necesito mostrar en una página la siguiente información:
- Número de usuarios activos anónimos
- Número de usuarios activos autenticados
La idea que he desarrollado es muy sencilla, pero en realidad no funciona.
Básicamente se trata del siguiente código en global.asax:
Código VB.NET:
Parece muy simple y muy bonito, la pega es que no funciona.Ver original
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) Application("UsuariosActivos") = 0 Application("UsuariosActivosAutenticados") = 0 End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Application.Lock() Application("UsuariosActivos") += 1 Application.UnLock() If User.Identity.IsAuthenticated Then Application.Lock() Application("UsuariosActivosAutenticados") += 1 Application.UnLock() End If End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) If User.Identity.IsAuthenticated Then Application.Lock() Application("UsuariosActivosAutenticados") -= 1 Application.UnLock() End If Application.Lock() Application("UsuariosActivos") -= 1 Application.UnLock() End Sub
El número de usuarios siempre va creciendo, y nunca decrece, por motivo de no ejecutar NUNCA el evento Session_End.
He buscado algo de información al respecto y, aparentemente, este evento se ejecuta al finalizar la sesión, pero sólo en caso de que el manejo de sesiones sea del tipo "InProc", que efectivamnente así es en mi aplicación. Esto se puede comprobar con la siguiente linea:
Código VB.NET:
Pero mi problema es que nunca se ejecuta el código del método Session_End.Ver original
Session.Mode.ToString
En principio, el tiempo de sesión de mi aplicación son los 20 minutos por defecto que aplica IIS, y por lo tanto, el comportamiento que espero es que tras esos 20 minutos de inactividad, la sesión finalice y se ejecute el código de Session_End, pero no es así.
¿Alguien me puede iluminar?
Gracias compañeros.