Отслеживать активность пользователя / действия для веб-сайта asp.net mvc? - PullRequest
7 голосов
/ 03 октября 2009

Я хотел бы вести журнал каждого просмотра страницы для всех пользователей моего веб-приложения. По прошествии достаточного количества времени я буду использовать этот журнал для создания отчетов. Я хотел бы, чтобы механизм регистрации был немного гибким, поскольку мне не нужно было бы регистрировать каждый http-запрос.

Пример использования: компания подписывается на мое веб-приложение и позволяет использовать его 5 сотрудникам. Я хотел бы сообщить, что 3 сотрудника использовали приложение на прошлой неделе. Или показать, что 4 сотрудника использовали его в период с июня по август текущего года.

Я использую asp.net mvc с сервером sql, если это имеет значение.

Это так просто? Создайте таблицу SQL со следующими столбцами: UserId, ControllerName, ActionName, ActionParameters, CreatedOn. Затем создайте ActionFilterAttribute, который добавляет запись в базу данных для каждого вызванного действия.

Есть ли какие-либо подводные камни, о которых мне следует беспокоиться (кроме потенциально большого размера таблицы)?

Ответы [ 3 ]

6 голосов
/ 03 октября 2009

Некоторые из подводных камней:

  1. Вы не сможете выполнять кэширование страниц на уровне сервера.
  2. Много записей в БД, поскольку вы регистрируете каждый запрос.
  3. Если на страницах происходят какие-либо действия, вы можете хранить избыточную информацию.

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

Рассматривали ли вы использование какой-либо утилиты разбора журнала IIS? В нем уже будет много информации, которая вам нужна.

2 голосов
/ 04 октября 2009

Другой вариант, если вы хотите использовать JavaScript, это то, что вы могли бы реализовать что-то по аналогии с SiteCatalyst. Вы отправляете запрос с помощью JavaScript от клиента при загрузке страницы к действию контроллера с соответствующей информацией в URL. например:

www.example.com \ AnalyticsController \ Action \ currentController \ currentAction \ userName

Преимущество заключается в том, что ведение журнала не выполняется последовательно со всеми другими операциями, и вы, вероятно, можете заставить его работать, поместив вызов AJAX на главной странице.

Недостатком является то, что он использует JavaScript, который, как указано, может быть отключен. Также было бы очень легко подделать.

0 голосов
/ 03 октября 2009

Посмотрите на интерфейс IActionFilter - вы можете написать свой собственный класс, который реализует это, и записывать все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...