2012-05-06 17 views
13

Actualmente estoy creando un sitio web utilizando Visual Studio 2010. Estoy utilizando el esquema de membresía predeterminado en SQL Server 2008 para la autenticación de usuario. Ahora estoy enfrentando el siguiente problema.MembershipUser.IsOnline es verdadero incluso después de cerrar sesión

Cuando un usuario cierra la sesión, la propiedad membership.IsOnline de ese usuario debe establecerse en falso. Sin embargo, eso no está sucediendo; membresía. La propiedad en línea de ese usuario sigue siendo verdadera.

Estoy usando el control LoginStatus para proporcionar un enlace de cierre de sesión para el usuario.

He intentado seguir User.IsOnline = true even after FormsAuthentication.SignOut(). Pero no da resultados.

Respuesta

15

AFAIK, FormsAuthentication.SignOut no tiene una relación directa con el sistema de afiliación. Por lo tanto, debe actualizar manualmente el LastActivityDate como mencionó en su pregunta. Y use Membership.UserIsOnlineTimeWindow en lugar de -2.

De MSDN

El valor de la propiedad UserIsOnlineTimeWindow se comprueba durante la llamada a GetNumberOfUsersOnline. Si LastActivityDate para un usuario es mayor que la fecha y hora actual menos el valor de UserIsOnlineTimeWindow en minutos, entonces el usuario se considera en línea. Puede determinar si un usuario de membresía se considera en línea con la propiedad IsOnline de la clase MembershipUser.

MembershipUser user = Membership.GetUser(false); 

FormsAuthentication.SignOut(); 

user.LastActivityDate = DateTime.UtcNow.AddMinutes(-(Membership.UserIsOnlineTimeWindow + 1)); 
Membership.UpdateUser(user); 
+0

Gracias Mehdi Golchin. Realmente funciona. Muchas gracias. –

+0

Gracias por la información adicional. Esto me ayudará en otros enfoques. –

+0

De nada :) –

Cuestiones relacionadas