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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам