Buenos días.
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:
Ver originalSub 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
Parece muy simple y muy bonito, la pega es que no funciona.
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:
Pero mi problema es que nunca se ejecuta el código del método Session_End.
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.