Узнать IP-адрес пользователя, учитывая его UID?
Вопрос
Я запускаю веб-сайт Drupal 7 с русской многопользовательской карточной игрой, и мне приходится блокировать некоторых очень надоедливых игроков каждые 4-5 дней.
До Drupal я использовал phpBB 3.Когда эти люди приезжали из небольшого города / деревни, я просто добавлял их IP-сеть в правила брандмауэра, чтобы они не могли повторно зарегистрироваться с новым почтовым адресом.Это хорошо сработало в моем случае, и мой вопрос не об этой политике.
Моя проблема в том, что с Drupal я не могу найти последний IP-адрес, используемый идентификатором пользователя.То есть.другие пользователи сообщают мне о нарушителе, и я знаю его uid, но я не могу найти его IP-адрес в журналах, потому что:
Я включил ведение системного журнала и вижу сообщения Drupal в /var/log / messagess, но редко появляется сообщение о входе пользователя в систему, вероятно, потому, что сеансы по умолчанию длинные, и я хотел бы сохранить это таким образом для удобства пользователя.
Я также включил "ведение журнала базы данных", но не знаю, где его увидеть (в какой таблице базы данных).
Решение
Если у вас включен модуль статистики, таблица «AccessLog» содержит IPS для всех ваших посетителей.
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
Преимущество первого над последним заключается в том, что первое всегда покажет вам последнее имя хоста, тогда как последнее не всегда может быть в курсе.
Другие советы
Насколько я знаю, Drupal не сообщает IP, используемый пользователями, в их профиле пользователя.Вы могли бы создать пользовательский модуль, проверить IP, используемый пользователем, и записать его в свою собственную таблицу базы данных;затем вы могли бы показать это в профиле пользователя пользователям, у которых есть соответствующие разрешения (например, пользователям с разрешением на администрирование пользователей).
Нужная вам функция - это ip_address(), который вы можете использовать в своей реализации hook_user_login().Реализующий hook_user_view(), Затем вы можете показать такую информацию пользователям с соответствующим разрешением.
Если вы используете модуль ведения журнала базы данных, Drupal хранит эту информацию в таблице наблюдения hostname
столбец. Вы можете либо написать пользовательские запросы, чтобы получить эту информацию, либо использовать Просмотр модуля сторожевого пса (В настоящее время только релиз разработчика для 7.x, поэтому я не уверен, насколько хорошо он работает в Drupal 7), чтобы выставить эту таблицу для просмотров.
Два недавних модуля могут помочь с этим:
Пользовательский ip log, который имеет интеграцию представлений, и Менеджер IP -адреса, который не имеет интеграции представлений, но предназначена для интеграции с манифестом, проклеить свои троллей и страдания- все запрещающие связанные модули.
идентификатор сессии() дает вам текущий пользовательский идентификатор сеанса пользователя, является ли он/она гостем или участником.
$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;