Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/10/2010, 11:56
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
Respuesta: Necesito alguna buena idea para controlar las sesiones

Hola de nuevo.
Se me ha ocurrido una sencilla idea que considero medianamente "digna".
Cabe comentar que me han aconsejado utilizar membership y role provider para controlar las sesiones de forma precisa. Pero después de hacer algunas pruebas he visto que se trataba de bastantes cambios en la aplicación tal y como está montada, y como decía, la forma en que lo he realizado ofrece un buen resultado, si no eres muy exigente.
He montado una tabla Sesiones en la base de datos, con los campos CodigoSesion, FechaHora, IP, IDCliente, y luego sus clases para las inserciones, etc.
Este es el código del global.asax
Código VB.NET:
Ver original
  1. Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  2.         'Obtenemos los datos de la sesion para guardarlos en la tabla Tienda_Sesiones
  3.         Session("CodigoSesion") = Guid.NewGuid.ToString
  4.         Dim misDetallesSesion As New DetallesSesion
  5.         misDetallesSesion.CodigoSesion = Session("CodigoSesion")
  6.         misDetallesSesion.FechaHora = Now
  7.         misDetallesSesion.IP = Request.ServerVariables("REMOTE_HOST")
  8.         misDetallesSesion.IDCliente = 0
  9.         If User.Identity.IsAuthenticated Then
  10.             FormsAuthentication.SetAuthCookie(User.Identity.Name, True)
  11.             'Al estar autenticado, nos guardamos el IDCliente para la tabla Tienda_Sesiones
  12.             misDetallesSesion.IDCliente = User.Identity.Name
  13.         End If
  14.         Dim objSesiones As New SesionesDB
  15.         objSesiones.Insertar(misDetallesSesion)
  16.         'Y eliminamos las sesiones expiradas
  17.         objSesiones.EliminarExpiradas()
  18.     End Sub

EliminarExpiradas lo que hace es eliminar aquellos registros con FechaHora < DateAdd(DateInterval.Minute, -FormsAuthentication.Timeout.Minutes, Now)

Luego, en cada Request del usuario voy actualizando el campo FechaHora de su sesión.

Y para controlar si es un usuario autenticado o anónimo, en la pantalla de login guardo el IDCliente del usuario en el campo IDCliente de su sesión correspondiente.
De la misma forma, en el codigo de Logout también limpio el campo IDCliente del usuario que se está deslogando.

Si alguien le interesa esta solución en más detalle podemos comentarlo aquí.
Saludos.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 12/10/2010 a las 12:02