Эта проверка похожа на проверку Netflix - вы можете войти, используя только 5 устройств.Но есть ограничения для устройств - следовательно, различные сеансы с одним и тем же идентификатором входа в систему можно идентифицировать, используя IP-адреса и информацию об устройстве в пакете HTTP.
Это очень хороший пример кода.
IsUserLoggedInElsewhere проверит входы в систему из других мест.
Вместо того, чтобы выходить из системы всех остальных, вам придется выходить из системы первого пользователя в зависимости от времени входа в систему всякий раз, когда третий пользователь входит в систему с использованием той же учетной записи.
Пожалуйста, см. Эту статью для получения более подробной информации об этом.
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();
}