我正在创建一个以Apache2作为服务器的django网站。我需要一种方法来确定我的网站(特别是每个页面)的唯一访问者的数量,以完全证明的方式。不幸的是,用户将有很高的动机尝试游戏"跟踪系统,所以我试图让它充分证明。
有没有办法做到这一点?
目前我正在尝试使用IP&用于确定唯一访问者的Cookie,但这个系统很容易被无头浏览器所迷惑。
答案 0 :(得分:4)
除非有必要将数据集成到您的Django数据库中,否则我强烈建议将您的流量“外包”给其他提供商。我对Google Analytics非常满意。
如果做不到这一点,你几乎无法阻止某人游戏系统。您可以根据IP地址进行限制,但当然您会遇到许多独立访客通常共享IP(例如,通过大学,组织或工作站点)的问题。 Cookie很容易清除,所以如果你走这条路,那么游戏很容易。
更难摆脱的一件事是存储在appcache中的文件,因此可以在现代浏览器上运行的一个可能的解决方案是将文件存储在appcache中。你计算它第一次作为唯一访问加载,之后因为它被缓存,它们不再被计算。
当然,因为你可能需要这个向后兼容,所以当然它让它对最有可能用于游戏系统的各种工具开放,例如curl。
你当然可以阻止非浏览器般的用户代理,如果某些游戏玩家不知道欺骗浏览器代理字符串(大多数人会很快学会),这会让你更加困难。
真的,最好的解决方案可能是 - 访问页面的结果是什么?例如,如果是销售产品,则不要奖励页面浏览量最多的人;奖励那些热门产生最多销售额的人。或者某人可能在页面上采取的耗时行动。
如果您愿意忽略禁用JavaScript的用户,则可以选择只计算访问该网页的用户,然后留在该页面指定给定的时间窗口(例如,1分钟) )。在给定的一段时间后,将Ajax请求返回给服务器。因此,如果他们尝试通过更改cookie并一次加载多个标签来进行游戏,那么它将无法工作,因为他们需要拥有相同的cookie才能注册他们已经在该页面上足够长的时间。我实际上认为这可能有用;我不能老实地看到一种游戏方式。基本上在服务器端,您在stay_until
中存储了一个名为request.session
的字典,其中包含每个唯一页面的键,大约1分钟后,您将Ajax调用回服务器。如果stay_until[page_id]
的值小于或等于当前时间,则他们是活跃用户,否则他们不是。这意味着,只需要至少 20分钟即可生成20个唯一身份访问者,只要您的收益价值低于消耗的时间,这将是一个强烈的抑制因素。
我甚至会更明确地说明:在noscript
标记的页面底部,输入“您的访问权限未计算在内。启用JavaScript计数”,其中包含一个显示跟踪的页面过程
答案 1 :(得分:2)
由于HTML请求是无状态的,并且您无法控制其客户端上的用户行为,因此没有防弹措施。
答案 2 :(得分:0)
您能够以万无一失的方式跟踪“独特”访问者的唯一方法是使其取决于某些受控因素,例如登录。其他任何事情都可能而且不会完全准确。