Member 11709930 Ответов: 2

Аутентификация веб - форм-перехват события автоматического тайм-аута


Мне нужно перехватить событие тайм-аута веб-форм, чтобы запустить свой собственный код.
Как это сделать?

Что я уже пробовал:

У меня есть веб-сайт, использующий аутентификацию форм для входа пользователей в систему.
Все это работает хорошо, но я хочу включить возможность отклонить вход в систему, если пользователь уже вошел в систему. т. е. отклонить одновременных подключений от 2 ПК.

Для этого я добавил столбец "LoggedIn" в таблицу SQL aspnet_Users.
Событие asp:Login 'LoginUser_LoggedIn' записывает 1 в столбец LoggedIn, и дальнейшие попытки входа проверяют это значение, прежде чем разрешить доступ.

Когда пользователь выходит из системы, событие asp:LoginView 'HeadLoginStatus_LoggedOut' записывает 0 в таблицу, чтобы отменить вход в систему.

Как я уже сказал, Все это прекрасно работает.

Проблема, с которой я столкнулся, заключается в том, что когда срабатывает автоматический тайм-аут форм, очевидно, таблица не обновляется, чтобы отразить выход из системы. Мне нужно перехватить событие тайм-аута форм, чтобы обновить таблицу пользователей.
Как же так?


Вот код формы из файла web.config
<authentication mode="Forms">      
      <forms name=".ASPXAUTH" loginUrl="~/Account/Login.aspx" protection="All" timeout="240" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>

2 Ответов

Рейтинг:
1

Member 11709930

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

F-ES Sitecore

На веб-сервере есть только одна вещь, доступная к SQL, и это веб-сервер, независимо от того, сколько у вас пользователей. Я не очень разбираюсь в лицензировании, но мне кажется, что ваша реальная проблема заключается в получении правильной\соответствующей лицензии. Я считаю, что существуют веб-специфические лицензии для SQL Server. В дополнение ко всему этому, вход в систему или нет не определяет доступ. Вы все еще являетесь "клиентом", если вы не вошли в систему.

Рейтинг:
0

MadMyche

То, что вы хотите сделать, это использовать конец сессии событие для обновления нашей таблицы SQL

Session_Start и Session_End | The ASP.NET форумы[^]


Member 11709930

Спасибо, но я после тайм - аута форм, который выходит из системы пользователя.
Время ожидания сеанса несколько отличается.

MadMyche

Я понимаю это; единственная проблема заключается в том, что на самом деле нет документации для "события тайм-аута форм".
Что вы можете сделать, так это использовать SessionID вместе с токеном для установки/сброса вашего Сеанса в поле статус.

Скорее всего, вам нужно будет сделать это в HttpModule, который имеет события для AuthenticateRequest и AuthorizeRequest; и если пара SessionID-токен "сломана", то вы убиваете логин.

Если у меня есть немного свободного времени сегодня, я посмотрю, смогу ли я найти какую-то информацию или код... просто считайте это отправной точкой

Member 11709930

Ценю вашу помощь, Мадмыч, так как я уже вышел из глубины своего опыта в этом деле.