3

我正在通过我的 Rails 应用程序中的 Mixpanel 跟踪事件。例如,我的控制器看起来像

class HomeController < ApplicationController
  def index
    track_event "Visitor: View Landing Page"
  end
end

问题是该应用程序受到了许多机器人的攻击,最引人注目的是 Pingdom(我们使用的性能跟踪服务)。当机器人攻击我的应用程序时,是否有一种干净的方法可以忽略跟踪?

注意:我对跟踪唯一身份访问者感兴趣,因此我为每个具有唯一 ID 的访问者分配了一个 cookie。机器人显然不存储 cookie。

4

2 回答 2

5

执行此操作的传统方法是构建机器人用户代理的索引,并在 UA 匹配机器人时简单地忽略您的跟踪事件代码。

bots = /Googlebot|Pingdom|.../
unless request.env["HTTP_USER_AGENT"].match(bots)
  track_event(...)
end

这是一个痛苦的维护,但它通常是有效的。这显然对任何谎报他们的 UA 的人都无效,但除了进行启发式检测以确定他们不是机器人之外,你无能为力,但在这种情况下,这可能不值得付出努力。

于 2012-10-28T16:18:42.513 回答
0

在 Rails 3 和 4 中,您可以使用 gem 来使用旧的 Rails 2 会话变量来轻松管理打开/关闭会话。对我来说效果很好:

https://github.com/kares/session_off

于 2014-06-13T02:34:08.943 回答