Как аудиту когда пользователь покидает приложение ASP.NET

StackOverflow https://stackoverflow.com/questions/201696

  •  03-07-2019
  •  | 
  •  

Вопрос

В ASP.NET Я ищу способ проверки пользователя, покидающего мое приложение.Чтобы быть конкретным, я хотел бы вставить запись 'logout' в таблицу аудита в SQL Server, когда сеанс пользователя прекращается / уничтожается по какой-либо причине (не обязательно из-за вызова session.abandon)

У меня есть класс 'SessionHelper', который управляет установщиками / получателями сеанса.

Я попытался отправить сообщение обратно в Session_End в Global.asax, но оно никогда не запускало это событие даже после истечения тайм-аута.

Я пробовал переопределять 'finalize' в классе SessionHelper и делать это там, когда класс будет уничтожен, но это событие также не сработало.

Я бы попробовал реализовать IDisposable в SessionHelper, но я не знаю, где его вызвать, чтобы он всегда вызывался.

Как правильно проводить аудит пользователя, покидающего ваше приложение ASP.NET ?

Спасибо!

Это было полезно?

Решение

Событие Session_End запускается только в том случае, если у вас есть сеансы InProc.SQL или управление сеансами сервера состояния не вызовут это событие.Если вы можете, вернитесь к сеансам InProc и используйте это событие.

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

Следующим лучшим решением было бы сохранить где-нибудь "время последнего доступа" для ваших пользователей и использовать его для определения времени ожидания сеанса.Однако реализация такого задания сложна (например, вы можете пропустить события выхода из системы, если пользователь быстро входит в систему)...

Так что идеального решения здесь нет.

Другие советы

Обратите внимание, конечно, на "правильный способ", но вот как я делал это в прошлом.

Иметь отметку даты и времени "активен", связанную с записью пользователя в базе данных.Каждый раз, когда пользователь получает доступ к странице, она обновляется до текущего времени.Если кто-то не заходил на страницу, скажем, в течение 15 минут, то этот пользователь регистрируется как событие "выхода из системы", а отметке времени присваивается значение NULL.

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

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

В этой таблице я просто продолжаю обновлять столбец ExpiresOn по мере взаимодействия пользователя с приложением (текущее время + 20 минут).Если они попытаются взаимодействовать после истечения срока действия, то я знаю, что они бездействовали в течение 20 минут, и принудительно введу новый логин.Для целей отчетности я знаю, что пользователь вышел из системы, если текущее время превышает ExpiresOn.Вы можете стать более сложным, чем это.Например, я переношу свои данные из таблицы сеансов, указанной выше, в таблицу отчетов с помощью обычного процесса.Это просто для того, чтобы таблица сеансов была небольшой, поскольку с ней взаимодействует множество материалов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top