Выход из других сеансов пользователя в ASP.NET MVC3 с проверкой подлинности с помощью форм - PullRequest
4 голосов
/ 18 мая 2011

Я создаю приложение ASP.NET MVC3 с использованием проверки подлинности с помощью форм, и я хотел бы выйти из системы всех существующих сеансов для пользователя, когда этот пользователь входит в систему. Я пытаюсь предотвратить вход и доступ нескольких людей на разных рабочих станцияхработая под той же учетной записью.

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

У меня есть несколько идей о том, как взломать это, но яМне интересно, есть ли для этого установленный метод с использованием IIS или API FormsAuthentication.

Ответы [ 2 ]

5 голосов
/ 19 мая 2011

Из-за отсутствия состояния сети вы не можете «выйти» из сеанса, пока они не сделают следующий запрос (например, сеанс может быть сохранен в файле cookie, который не может быть записан на клиенте внеконтекст взаимодействия запрос-ответ).

Все еще существует решение, которое предполагает, что вы используете состояние сеанса, и предпочтительно у вас есть общий базовый контроллер для всех ваших контроллеров, требующих «Аутентификация».

После успешного входа в систему сгенерируйте токен (возможно, guid) и сохраните его вместе с сеансом.Также запишите это в хранилище всего приложения (например, базу данных или контекст приложения) с ключом идентификатора пользователя.

В базовом контроллере (или в противном случае вам нужно создать фильтр действий) проверьте токен в сеансепротив токена, зарегистрированного для идентификатора пользователя в хранилище приложения.Если они не совпадают, выйдите из системы, используя стандартный вызов SignOut().

0 голосов
/ 18 мая 2011

Вы можете использовать свойство Membership.IsOnline, основанное на LastActivityDate:

Пользователь считается онлайн, если текущая дата и время минус Значение свойства UserIsOnlineTimeWindow раньше, чем LastActivityDate для пользователя.

...