Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/10/2010, 05:59
Avatar de moNTeZIon
moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Necesito alguna buena idea para controlar las sesiones

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 original
  1. Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
  2.         Application("UsuariosActivos") = 0
  3.         Application("UsuariosActivosAutenticados") = 0
  4.     End Sub
  5.  
  6.     Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  7.         Application.Lock()
  8.         Application("UsuariosActivos") += 1
  9.         Application.UnLock()
  10.         If User.Identity.IsAuthenticated Then
  11.             Application.Lock()
  12.             Application("UsuariosActivosAutenticados") += 1
  13.             Application.UnLock()
  14.         End If
  15.     End Sub
  16.  
  17.     Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  18.         If User.Identity.IsAuthenticated Then
  19.             Application.Lock()
  20.             Application("UsuariosActivosAutenticados") -= 1
  21.             Application.UnLock()
  22.         End If
  23.         Application.Lock()
  24.         Application("UsuariosActivos") -= 1
  25.         Application.UnLock()
  26.     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:
Código VB.NET:
Ver original
  1. Session.Mode.ToString
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.
__________________
..:: moNTeZIon ::..