2012-05-06 2 views
13

현재 Visual Studio 2010을 사용하여 웹 사이트를 만들고 있습니다. 사용자 인증을 위해 SQL Server 2008의 기본 멤버십 스키마를 사용하고 있습니다. 이제 다음과 같은 문제에 직면하고 있습니다.MembershipUser.IsOnline은 로그 아웃 후에도 마찬가지입니다.

사용자가 로그 아웃하면 해당 사용자의 membership.IsOnline 속성을 false로 설정해야합니다. 그러나 그것은 일어나지 않습니다. 해당 사용자의 isOnline 속성은 여전히 ​​true입니다.

저는 LoginStatus 컨트롤을 사용하여 사용자에게 로그 아웃 링크를 제공하고 있습니다.

나는 User.IsOnline = true even after FormsAuthentication.SignOut()을 따라하려고 시도했다. 그러나 결과는 아무 것도 아니다.

답변

15

AFAIK, FormsAuthentication.SignOut은 회원제 시스템과 직접적인 관련이 없습니다. 따라서 질문에 언급 된대로 수동으로 LastActivityDate을 업데이트해야합니다. 그리고 -2 대신에 Membership.UserIsOnlineTimeWindow을 사용하십시오. MSDN

에서

는 UserIsOnlineTimeWindow 속성 값은 GetNumberOfUsersOnline 호출 동안 확인됩니다. 사용자의 LastActivityDate가 이고 현재 날짜와 시간에서 분 단위로 UserIsOnlineTimeWindow 값을 뺀 값보다 큰 경우 사용자는 으로 간주됩니다. 멤버십 사용자가 온라인 상태로 MembershipUser 클래스의 IsOnline 속성으로 간주되는지 여부를 결정할 수 있습니다.

MembershipUser user = Membership.GetUser(false); 

FormsAuthentication.SignOut(); 

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

감사 메디 Golchin. 실제로 작동한다. 고마워. –

+0

추가 정보를 가져 주셔서 감사합니다. 이것은 더 많은 접근법에 도움이 될 것입니다. –

+0

환영합니다 :) –