Ограничение числа вошедших в систему пользователей в приложении .NET MVC - PullRequest
0 голосов
/ 19 февраля 2019

Я провел значительное количество исследований о том, как ограничить количество пользователей, которые могут войти в приложение.Теперь я видел людей, которые упоминали проверки на основе файлов cookie, чтобы увидеть, сколько пользователей вошли в учетную запись, но я не видел ни одной реализации, где бы я мог видеть, как это работает точно.

Кроме того, мне интересноесли в .NET MVC 5 уже реализовано решение этой проблемы?

Моя конечная цель заключается в следующем:

  • Только два пользователя могут войти в систему под одной учетной записью
  • Еслитретий пользователь входит в систему, первый, кто вошел в систему, должен быть автоматически удален из системы

Может ли кто-нибудь помочь мне с этим?

С уважением

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Эта проверка похожа на проверку 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();
}
0 голосов
/ 19 февраля 2019

Я думаю, что это можно сделать одним из двух способов:

1: по базе данных - добавить поле в таблицу пользователей, см. login_status (Bool) - и Last_login_Time (Дата) - Измените login_status на (True) и Last_login_Time на dateTime.now - Перед входом получите от Пользователи номер таблицыпользователи с login_status true - если считать меньше двух .. нормальный вход - если считать больше чем = 2, завершается сеанс для пользователя с более ранним временем входа и установленным текущим пользователем.

2 - Также это можно сделать с помощью глобальных переменных в Global.asax и

...