django - 确定站点的唯一访问者

标签 django web unique visitors

我正在创建一个以 Apache2 作为服务器的 Django 网站。我需要一种方法来以完全证明的方式确定我网站的唯一身份访问者数量(特别是每个页面)。不幸的是,用户将有很大的动机来尝试“玩弄”跟踪系统,所以我试图让它充分证明。

有没有办法做到这一点?

目前我正在尝试使用 IP 和 Cookie 来确定唯一身份访问者,但该系统很容易被 headless 浏览器所欺骗。

最佳答案

除非有必要将数据集成到您的 Django 数据库中,否则我强烈建议将您的流量“外包”给其他提供商。我对 Google Analytics 非常满意。

否则,您几乎无能为力阻止某人玩弄系统。您可以根据 IP 地址进行限制,但当然会遇到许多唯一访问者共享 IP(例如,通过大学、组织或工作站点)的问题。 cookies 很容易清除,所以如果你走那条路,那么游戏就很容易了。

更难摆脱的一件事是存储在 appcache 中的文件,因此一种适用于现代浏览器的可能解决方案是将文件存储在 appcache 中。您将第一次加载它的时间计算为唯一访问,之后由于它被缓存,它们不会再次被计算在内。

当然,因为您可能需要它向后兼容,所以它当然可以使用最有可能用于系统游戏的各种工具,例如 curl。

您当然可以阻止非浏览器类的用户代理,如果某些游戏玩家不知道欺骗浏览器代理字符串(大多数人会很快学会),这会稍微困难一些。

真的,最好的解决方案可能是——访问页面的结果是什么?例如,如果是销售产品,则不要奖励页面浏览量最多的人;奖励点击次数最多的人。或者某人可能在页面上采取的任何耗时的操作。

可能的解决方案:

如果你愿意忽略禁用 JavaScript 的人,你可以选择只计算访问页面的人,然后 留在那个页面 对于给定的时间窗口(例如 1 分钟)。在给定的时间段后,向服务器发送一个 Ajax 请求。因此,如果他们试图通过更改 cookie 并同时加载多个选项卡来玩游戏,那将是行不通的,因为他们需要拥有相同的 cookie 才能注册他们在该页面上停留的时间足够长。我实际上认为这可能有效;老实说,我无法找到一种游戏方式。基本上在服务器端,你存储了一个名为 stay_until 的字典。在 request.session使用每个唯一页面的键,大约 1 分钟后,您运行一个 Ajax 调用返回到服务器。如果 stay_until[page_id] 的值小于或等于当前时间,那么他们是活跃用户,否则他们不是。这意味着它需要某人 至少 20 分钟可产生 20 位独立访客,只要您的返回值(value)低于所消耗的时间,这将是一个强烈的抑制因素。

我什至让它更明确:在 noscript 中的页面底部标记,将“您的访问未计算在内。打开要计算的 JavaScript”,并在页面上显示跟踪过程。

关于django - 确定站点的唯一访问者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9701315/

相关文章:

python - 新数据框的唯一性

Django HttpResponseRedirect和reverse()

web - 我应该使用哪种 WebCL 原型(prototype)?

php - 为什么php框架限制url字符

java - 使用 Zip4j 生成用于下载的 Zip

mysql - 在 MySQL 中,是否可以对一行设置 UNIQUE 约束?

java - 如何使用 JGAP 设置具有非重复等位基因的染色体?

django - 表单集中每个表单中字段的不同标签

django - 在 Django Admin 中向每个 View (base_site.html)添加内容

python - 创建计时器计数器 - Python