2012-07-12 4 views
1

기본적으로 내 응용 프로그램에서 로그인 한 사용자 수를 제한해야합니다. 내가하고있는 일이 사용 중임 Membership.GetNumberOfUsersOnline() 새 사용자를 인증하는 동안 로그인 한 사용자 수를 얻고 있습니다. 제한하려는 수의 온라인 사용자 수를 확인합니다. Membership.GetNumberOfUsersOnline() 새 사용자가 로그인 할 때 문제가 없는데, 사용자가 Membership.GetNumberOfUsersOnline()의 값을 로그 아웃하면 자동으로 감소하지 않습니다. msdn을 검색하여이 메서드가 마지막 사용자 활동 시간을 확인했는데이 이벤트는 서명 이벤트를 지원하지 않습니다. Membership에 다른 방법으로 사용자의 수를 제한 할 수 있습니까? SilverlightREST 서비스를 사용하고 있습니다. 서버 쪽에서 Membership.GetNumberOfUsersOnline()을 사용하고 있습니다.Membership.GetNumberOfUsersOnline()에서 올바른 값을 반환하지 않습니다.

고지.

답변

0

에서 사린에 의해 ASP.NET C# 방문자 실시간 세션 추적기를 시도 할 수 있습니다/0). 매 15 분마다 사용자 수는 온라인입니다. 타이머를 사용하여 코드 숨김 타이머를 사용하십시오. 타이머를 확인하고 매 15 분마다 그 특정 이벤트를 발생 시키십시오.

+0

고맙기는하지만 회원 표를 사용하고 있습니다. 테이블을 수정하는 것이 좋은 생각입니까? –

+0

테이블을 수정하지 마십시오. – Theo

+0

수정하는 것은 아닙니다. 해당 테이블에 추가 열을 추가 할 수 있습니다. –

1

저는 SqlMembershipProvider를 사용하고 있다고 가정합니다. 당신이 사용하는 경우 그렇다면, 이것은 내가 걸릴 방향 ...

... 지금

using System.Web.Security; 

public class MyMembershipProvider : SqlMembershipProvider 
{ 
    public override bool ValidateUser(string username, string password) 
    { 
     if (base.ValidateUser(username, password)) 
     { 
      // successfully logged in. add logic to increment online user count. 

      return true; 
     } 

     return false; 
    } 

    public override int GetNumberOfUsersOnline() 
    { 
     // add logic to get online user count and return it. 
    } 
} 

을 SqlMembershipProvider를 상속하는 클래스를 만들고 GetNumberOfUsersOnline()와 ValidateUser() 메서드를 오버라이드 (override)입니다 사용자가 로그 아웃 할 수 있도록 LoginStatus 컨트롤을 사용하면 LoggedOut 이벤트를 사용하여 감소 온라인 사용자 수 논리를 추가 할 수 있습니다.

web.config에서 새 사용자 지정 멤버 자격 공급자를 사용해야합니다. 멤버십의 type 속성에 대해 type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"과 같은 내용을 type="MyNameSpace.MyMembershipProvider"과 같이 변경합니다. I 생각하면이 전부입니다.

이 솔루션을 사용하면 몇 가지 추가 기능 만 사용하여 SqlMembershipProvider 공급자를 계속 사용할 수 있습니다.

관련 문제