我已经做了大量关于如何限制可以登录到应用程序的用户数量的研究。现在我看到人们提到基于cookie的检查,看看有多少用户登录到帐户,但我还没有看到任何实现,我可以看到它是如何工作的。
除此之外,我想知道在.NET MVC 5中是否已经实现了这个解决方案?
我的最终目标是:
有人可以帮我解决这个问题吗?
最好的祝福
此检查听起来类似于Netflix检查 - 您只能使用5台设备登录。但是设备存在限制 - 因此可以使用HTTP数据包中的IP地址和设备信息来识别相同登录ID中的不同会话。
这是非常好的代码示例。
IsUserLoggedIn Elsewhere将检查来自其他地方的登录。
每当第三个用户使用同一帐户登录时,您将不得不根据登录时间注销第一个用户,而不是记录其他人。
请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();
}
我认为可以通过以下两种方式之一完成:
1:按数据库 - 在users表中添加一个字段,参考login_status(Bool) - 和Last_login_Time(日期) - 将login_status更改为(True),将Last_login_Time更改为dateTime.now - 登录前从Users获取表用户数login_status为true - 如果count小于2 ..正常登录 - 如果计数超过= 2结束会话的用户具有较早的登录时间并设置当前用户被记录..
2 - 也可以通过在Global.asax和中使用全局变量来完成