1

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

提前谢谢。

4

3 回答 3

1

您可以在http://www.sarin.mobi/2008/11/aspnet-csharp-visitor-real-time-session-tracker/上试用 Sarin 的 ASP.NET C# 访客实时会话跟踪器

于 2012-07-12T06:37:12.940 回答
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 属性,将其从它所说的任何内容更改type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"为类似type="MyNameSpace.MyMembershipProvider". 我这就是它的全部。

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

于 2012-07-12T06:48:59.713 回答
0

在数据库的用户表中添加一个名为 status 的新列。该状态列的数据类型位 (1/0)。每 15 分钟检查一次没有用户在线。在页面后面的代码中使用计时器。检查计时器并每 15 分钟引发该特定事件

于 2012-07-12T06:40:00.300 回答