限制.NET MVC应用程序上的登录用户数

时间:2019-02-19 10:59:01

标签: c# asp.net asp.net-mvc asp.net-mvc-4 login

我已经就如何限制可以登录到应用程序的用户数量进行了大量研究。现在,我已经看到有人提到基于cookie的检查来查看有多少用户登录到该帐户,但是我还没有看到可以实现该功能的任何实现方式。

除了我想知道.NET MVC 5中是否已经实现了解决方案?

我的最终目标是:

  • 只有两个用户可以登录一个帐户
  • 如果第三个用户登录,则第一个登录的用户应自动踢出系统

有人可以帮我吗?

最诚挚的问候

2 个答案:

答案 0 :(得分:1)

我认为可以通过以下两种方法之一来完成:

1:按数据库 -在用户表中添加字段,请参见 login_status (布尔)-和 Last_login_Time (日期) -将 login_status 更改为(True),将 Last_login_Time 更改为dateTime.now -在登录前从 Users 表中获得 login_status 为true的用户数 -如果计数少于两个..normal登录 -如果登录时间较早且设置了当前用户的用户计数超过= 2个结束会话,则记录该会话。

2-也可以通过使用Global.asax和

中的全局变量来完成

答案 1 :(得分:1)

此检查听起来类似于Netflix检查-您只能使用5台设备登录。 但是设备存在限制-因此可以使用HTTP数据包中的IP地址和设备信息来识别同一登录ID中的不同会话。

这是非常好的代码示例。

IsUserLoggedInElsewhere将检查其他地方的登录信息。

当第三位用户使用同一帐户登录时,您将不得不根据登录时间注销第一位用户,而不是注销其他所有人。

refer this article以获取更多有关此的详细信息。

public static bool IsYourLoginStillTrue(string userId, string sid)
{
    CapWorxQuikCapContext context = new CapWorxQuikCapContext();

    IEnumerable<Logins> logins = (from i in context.Logins
                                    where i.LoggedIn == true && 
                                    i.UserId == userId && i.SessionId == sid
                                    select i).AsEnumerable();
    return logins.Any();
}

public static bool IsUserLoggedOnElsewhere(string userId, string sid)
{
    CapWorxQuikCapContext context = new CapWorxQuikCapContext();

    IEnumerable<Logins> logins = (from i in context.Logins
                                    where i.LoggedIn == true && 
                                    i.UserId == userId && i.SessionId != sid
                                    select i).AsEnumerable();
    return logins.Any();
}

public static void LogEveryoneElseOut(string userId, string sid)
{
    CapWorxQuikCapContext context = new CapWorxQuikCapContext();

    IEnumerable<Logins> logins = (from i in context.Logins 
                                    where i.LoggedIn == true && 
                                    i.UserId == userId && 
                                    i.SessionId != sid // need to filter by user ID
                                    select i).AsEnumerable();

    foreach (Logins item in logins)
    {
        item.LoggedIn = false;
    }

    context.SaveChanges();
}