Узнать IP-адрес пользователя по его UID?

8

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

До Drupal я использовал phpBB 3. Когда эти люди приезжали из небольшого города / села, я просто добавлял их IP-сеть к правилам брандмауэра, чтобы они не могли заново зарегистрироваться с новым почтовым адресом. Это хорошо сработало в моем случае, и мой вопрос не об этой политике.

Моя проблема в том, что с Drupal я не могу найти последний IP-адрес, использованный идентификатором пользователя. Т.е. об этом мне сообщили другие пользователи, и я знаю его uid, но я не могу найти его IP-адрес в журналах, потому что:

  1. Я включил ведение журнала syslog и вижу сообщения Drupal в / var / log / messagess, но редко появляется сообщение о входе пользователя в систему, возможно потому, что сеансы по умолчанию длинные, и я хотел бы сохранить его таким комфорт пользователя.

  2. Я также включил «ведение журнала базы данных», но не знаю, где его увидеть (какая таблица базы данных).

Александр Фарбер
источник

Ответы:

9

Если у вас включен модуль статистики, в таблице «accesslog» содержатся IP-адреса всех ваших посетителей.

SELECT hostname FROM accesslog WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

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

В этом случае вы можете использовать sessionsтаблицу:

SELECT hostname FROM sessions WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

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

Беркеш
источник
Правда, таблица сессий тоже имеет IP-адреса. Я просто не могу найти там некоторых пользователей. Может быть, это моя вина как-то. Я приму ваш ответ и отключу модули системного журнала и статистики базы данных, потому что они мне не особо пригодились.
Александр Фарбер
Пользователи, которые не вошли в систему некоторое время, не будут иметь сеанса и не будут найдены. Как я уже сказал, «последнее не всегда будет актуальным», то есть, возможно, не все пользователи.
Беркес
5

Насколько я знаю, Drupal не сообщает IP-адрес, используемый пользователями в своем профиле. Вы можете создать собственный модуль, проверить IP-адрес, используемый пользователем, и записать его в свою таблицу базы данных; затем вы можете показать его в профиле пользователя пользователям, у которых есть соответствующие права (например, пользователям, имеющим разрешение на администрирование пользователей).

Вам нужна функция ip_address () , которую вы можете использовать в своей реализации hook_user_login () . Реализуя hook_user_view () , вы можете затем показать такую ​​информацию пользователям с соответствующими правами.

киамалуно
источник
Спасибо, но тогда у меня возникнет та же проблема, что и сейчас: пользователи редко входят в систему, как я вижу в системном журнале. И hook_user_login () вызывается только когда пользователь входит в систему (вводит свой пароль).
Александр Фарбер
Вы можете заставить их войти в систему; если вы очистите таблицу сессий, пользователи должны снова войти в систему.
kiamlaluno
3

Если вы используете модуль ведения журнала базы данных, Drupal сохраняет эту информацию в таблице наблюдения под hostnameстолбцом. Вы можете либо написать пользовательские запросы для получения этой информации, либо использовать модуль Views Watchdog (в настоящее время это только версия dev для 7.x, поэтому я не уверен, насколько хорошо он работает в Drupal 7), чтобы открыть эту таблицу для Views.

jhedstrom
источник
Нет, к сторожевой таблице, к сожалению, относится та же проблема, что и к модулю ядра syslog: для некоторых пользователей у меня нет IP-адреса, потому что они вошли в систему давно. Поэтому я получаю отчет о каком-то злонамеренном пользователе, пытаюсь найти его IP-адрес и добавить его в правила брандмауэра моего брандмауэра, но я нигде не могу найти его IP-адрес.
Александр Фарбер
К сожалению, по умолчанию для сторожевого таймера сохраняется только 1000 сообщений. На активном сайте это может длиться не более часа. В зависимости от вашего сайта, вы можете увеличить это число (admin / config / development / logging) или создать собственное решение для хранения IP, как описано в kiamlaluno.
Jhedstrom
1

Два последних модуля могут помочь с этим:

User IP Log , который имеет интеграцию Views, и IP Address Manager , который не имеет интеграции Views, но предназначен для интеграции с Manifest, Cave Your Trolls и Misery - все запрещающие связанные модули.

Патрик Кенни
источник
-1

session_id () дает вам текущий идентификатор сеанса пользователя, является ли он / она гостем или участником.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Викас Наранье
источник