2012-07-12 101 views
1

我基本上需要限制我的应用程序中登录用户的数量。我正在做的是使用Membership.GetNumberOfUsersOnline() 我在验证新用户时获取登录用户的数量我将在线用户的数量检查为要限制的数字。 Membership.GetNumberOfUsersOnline()当新用户登录时工作正常,当用户注销Membership.GetNumberOfUsersOnline()的值不会自动递减时发生问题。我搜遍了msdn,发现这个方法检查最后一个用户活动时间,它不支持注销事件。 Membership提供商是否有其他方式限制用户数量。 我正在使用SilverlightREST服务。我在服务器端使用Membership.GetNumberOfUsersOnline()Membership.GetNumberOfUsersOnline()不返回正确的值

Thanx提前。

回答

0

尝试ASP.NET C#访问者实时会话跟踪在用户表中添加新列命名的状态在状态栏位的数据基地。数据类型(1/0)。每15分钟检查一次用户是否在线。在代码后面使用计时器page.Check计时器,并在每隔15分钟提高该特殊事件

+0

Thanx的答复,但我使用的会员表。修改这些表是否是一个好主意? – 2012-07-12 06:43:16

+0

请勿修改表格。 – Theo 2012-07-12 06:49:26

+0

我不是说要修改。您可以在该表中添加一个额外的列。 – 2012-07-12 06:52:00

1

我假设您正在使用SqlMembershipProvider。如果是这样,这是我想借此方向......

创建一个继承SqlMembershipProvider的一类和重写GetNumberOfUsersOnline()和的ValidateUser()方法...

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. 
    } 
} 

现在,如果你正在使用一个允许用户注销的LoginStatus控件,您可以使用LoggedOut事件在那里添加递减在线用户计数逻辑。

您将不得不在web.config中使用新的自定义成员资格提供程序。对于您的会员资格的类型属性,请将其从所述内容中更改,例如type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"type="MyNameSpace.MyMembershipProvider"之类的内容。我认为这就是它的一切。

该解决方案允许您继续使用您的SqlMembershipProvider提供程序,只需添加几个。