Как регистрировать действия пользователя с помощью php и mysql? - PullRequest
10 голосов
/ 21 марта 2010

Я работаю над своей CMS и хочу, чтобы она регистрировала действия пользователей и других администраторов.Например: когда новый пользователь регистрируется или администратор создает новое новостное сообщение -> обновляет последнее действие.

Я хочу знать, как лучше и проще всего.

Ответы [ 4 ]

14 голосов
/ 21 марта 2010
  • Создайте таблицу в своей базе данных для регистрации вашей активности пользователя.
  • Определите различные типы действий, которые могут происходить в вашем приложении.
  • Создайте общую функцию, которая регистрирует любые действия в этой таблице.
  • Вызывайте эту функцию из любого места, где вы выполняете журналактивности в вашем приложении.

Затем вы можете написать инструмент для создания отчетов, который даст вашим администраторам доступ к этим зарегистрированным действиям, вы сможете фильтровать по пользователю, времени и типам действий.

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

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

Редактировать для очистки:

Со временем вы можете собрать много записей в этой таблице.В зависимости от ваших требований вы можете делать разные вещи.

  • Удалить любые записи старше x дней (возможно, год)

  • Удалить любые записинекоторые типы старше x дней, но записи других типов сохраняются дольше или навсегда.

  • Перемещение записей старше определенного порога в таблицу архивного журнала.Это уменьшает размер основной таблицы, но позволяет вам получить доступ к более старым данным журнала, если это действительно необходимо.У меня есть флажок Use archive на моей странице журналов обзора.

4 голосов
/ 21 марта 2010

Базовый ответ

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

Возможно, полезный пример

Я не уверен насчет PHP CMS, которые делают это, но я знаю, что Администратор Django делает это. Django реализован на Python, но перенести этот код на PHP должно быть довольно просто. Даже если код не является прямым портом, дизайн может быть перенесен.

Файл, содержащий журналирование, находится в модуле admin в models.py .

Некоторые ключевые аспекты:

Модель данных для таблицы регистрации:

class LogEntry(models.Model):
  action_time = models.DateTimeField(_('action time'), auto_now=True)
  user = models.ForeignKey(User)
  content_type = models.ForeignKey(ContentType, blank=True, null=True)
  object_id = models.TextField(_('object id'), blank=True, null=True)
  object_repr = models.CharField(_('object repr'), max_length=200)
  action_flag = models.PositiveSmallIntegerField(_('action flag'))
  change_message = models.TextField(_('change message'), blank=True)
  objects = LogEntryManager()

И LogEntryManager, который сохраняет фактические записи журнала:

class LogEntryManager(models.Manager):
  def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
    e = self.model(None, None, user_id, content_type_id, smart_unicode(object_id), object_repr[:200], action_flag, change_message)
    e.save()

HTH, удачи!

2 голосов
/ 21 марта 2010

Я использую две таблицы для действий: одну, которая присваивает каждому виду активности идентификатор, а другую - просто регистрирует идентификатор пользователя, идентификатор активности и метку времени.Я делаю это потому, что int занимает меньше места, чем строка, так зачем записывать одни и те же строки снова и снова?Второй действительно не нужен, вы просто так же легко сохраняете коды действий в текстовом файле для справки, но БД кажется просто более легким местом для запоминания.Мы использовали функцию для обработки фактических действий регистрации, но в следующий раз, когда я это сделаю, я собираюсь использовать шаблон Observer.Кажется, он гораздо более гибкий, и мне уже приходилось редактировать вызовы функций журналирования из старого кода, который я не собирался регистрировать.Я предпочитаю повторно использовать код без редактирования.

0 голосов
/ 14 июня 2017

Это очень просто сделать с PHP / JAVA FUNCTION JQUERY и его AJAX методом отправки данных ... Перед публикацией решения - прочитайте эти две строки

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

Вот решение шаг за шагом: -

1. create a DB Table -- to record these things
     a) Page Name.
     b) logged in user name
     c) session details (To record all the sessions).
     d) POST/GET data details (To record all the post/get data for the       
        page)
     e) Record Created Date.

или любую другую вещь, которую вы хотите записать. 2. Создайте функцию Jquery или функцию PHP, которая будет автоматически запускаться на каждой странице. 3. Эта функция будет собирать весь сеанс этой страницы, данные о пользователях и данные, которые были переданы на эту страницу. Помимо этого - вы также можете записывать - с какой страницы эта новая страница называется - Это довольно простой и лучший способ реализовать функции записи журналов даже в уже работающих старых программах:)

Если вы хотите, чтобы весь код, который я упоминал выше, использовался - найдите его в сети по механизму, который я определил, просто вам нужен ФУНКЦИОНАЛЬНЫЙ КОД - АВТОМАТИЧЕСКИЙ код выполнения функции - простой

...