2012-05-06 23 views
13

Obecnie tworzę stronę internetową przy użyciu Visual Studio 2010. Używam domyślnego schematu członkostwa w SQL Server 2008 do uwierzytelniania użytkownika. Teraz mam do czynienia z następującym problemem.MembershipUser.IsOnline jest prawdziwe nawet po wylogowaniu

Po wylogowaniu użytkownika właściwość membership.IsOnline tego użytkownika powinna mieć wartość false. Jednak tak się nie dzieje; member.IsOnline właściwość tego użytkownika jest nadal prawdziwa.

Używam formantu LoginStatus, aby udostępnić użytkownikowi łącze wylogowania.

Próbowałem podążać za User.IsOnline = true even after FormsAuthentication.SignOut(). Ale nic nie daje.

Odpowiedz

15

AFAIK, FormsAuthentication.SignOut nie ma bezpośredniego związku z systemem członkowskim. Dlatego musisz ręcznie zaktualizować LastActivityDate, tak jak wspomniałeś w swoim pytaniu. I użyj Membership.UserIsOnlineTimeWindow zamiast -2.

Od MSDN

Wartość właściwości UserIsOnlineTimeWindow jest sprawdzana podczas rozmowy do GetNumberOfUsersOnline. Jeśli LastActivityDate dla użytkownika jest większa niż aktualna data i godzina minus wartość UserIsOnlineTimeWindow w minutach, to użytkownik jest uznawany za online w trybie online przez . Użytkownik może określić, czy użytkownik członkowski jest uznawany za online za pomocą właściwości IsOnline klasy MembershipUser.

MembershipUser user = Membership.GetUser(false); 

FormsAuthentication.SignOut(); 

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

Dzięki Mehdi Golchin. To naprawdę działa. Wielkie dzięki. –

+0

Dziękujemy za dodatkowe informacje. Pomoże mi to w dalszych podejściach. –

+0

Nie ma za co :) –