我正在使用俄罗斯多人纸牌游戏运行Drupal 7网站,每4-5天必须阻止一些非常烦人的玩家。

在Drupal之前,我正在使用PHPBB3。当这些人来自一个小城市/村庄时,我只会将其IP网络添加到防火墙规则中,这样他们就无法重新注册新的邮件地址。在我的情况下,这很好,我的问题与这项政策无关。

我的问题是,有了Drupal,我找不到用户ID使用的最后一个IP地址。即施虐者是其他用户向我报告的,我知道他的UID,但我在日志中找不到他的IP地址,因为:

  1. 我已经启用了syslog-logging,并在/var/log/messagess中查看drupal消息,但是很少有关于用户登录的消息,这可能是因为默认情况下会话很长,我想将其保留在此方面。用户舒适。

  2. 我还启用了“数据库记录”,但不知道在哪里可以看到它(哪个数据库表)。

有帮助吗?

解决方案

如果您启用了统计数据模块,则“ 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地址(), ,您可以在实施中使用 hook_user_login(). 。实施 hook_user_view(), 然后,您可以在正确的许可下向用户显示此类信息。

如果您使用的是数据库记录模块,则Drupal将此信息存储在看门狗表中, hostname 柱子。您可以编写自定义查询以获取此信息,也可以使用 查看看门狗模块 (目前,仅用于7.x的开发版本,因此我不确定它在Drupal 7中的工作原理如何)将该表公开视图。

最近的两个模块可能会有所帮助:

用户IP日志, ,具有集成的视图,并且 IP地址管理器, ,它没有集成的视图,而是旨在与明显的,陷入巨魔和痛苦的融合 - 所有禁止相关模块。

session_id() 无论他/她是客人还是会员,都可以为您提供当前的用户会议ID。

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
许可以下: CC-BY-SA归因
scroll top