我已经就如何限制可以登录到应用程序的用户数量进行了大量研究。现在,我已经看到有人提到基于cookie的检查来查看有多少用户登录到该帐户,但是我还没有看到可以实现该功能的任何实现方式。
除了我想知道.NET MVC 5中是否已经实现了解决方案?
我的最终目标是:
有人可以帮我吗?
最诚挚的问候
答案 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();
}