3

我已经查看了最流行的 Django hit counter 解决方案,但似乎都没有解决刷新按钮的垃圾邮件问题。

我真的必须记录每个访问者的 IP,以防止他们通过发送刷新按钮(或编写一个快速而肮脏的脚本来为他们​​做这件事)人为地增加页面浏览量吗?

更多信息

所以现在你可以用下面几行 Python 代码来增加你的视图计数。它是如此之少,以至于您实际上不需要编写脚本,您只需将其输入到交互式会话中即可:

from urllib import urlopen

num_of_times_to_hit_page = 100
url_of_the_page = "http://example.com"

for x in range(num_of_times_to_hit_page):
    urlopen(url_of_the_page)

我可能会使用的解决方案

对我来说,当您需要在每个页面视图上对数据库进行大量写入时,这是一个非常艰难的情况,但我想这无济于事。由于几个用户人为地夸大了他们的查看次数,我将实施 IP 日志记录。并不是说他们是坏人,甚至不是坏用户。

请参阅有关解决缓存问题的答案...我将首先遵循该路线。将更新结果。

对于它的价值,似乎 Stack Overflow 正在使用 cookie(我无法增加自己的查看次数,但当我在另一个浏览器中访问该网站时它会增加。)

我觉得好处太多了,现在这种‘作弊’太容易了。

感谢大家的帮助!

4

3 回答 3

8

没有万无一失的方法可以防止某人人为地夸大计数。相反,您愿意花时间让他们更难做到这一点:

  • 一点也不(他们点击刷新按钮)
  • 设置 cookie,检查 cookie 以查看它们是否已经存在(它们清除 cookie)
  • 记录 IP 地址(每次都伪造不同的 IP)
  • 要求使用他们回复的电子邮件登录(他们注册了多个电子邮件帐户)

因此,最后,您只需要选择您想要达到的努力程度,以防止用户滥用系统。

于 2009-07-31T13:37:25.680 回答
8

记录 IP 可能是最安全的。它并不完美,但它比 cookie 更好,并且比要求注册对用户来说更不烦人。也就是说,我建议不要将这些保存在数据库中。相反,使用 Django 的低级缓存框架。关键是 ip,值是一个简单的布尔值。即使是基于文件的缓存也应该非常快,但如果您真的期望流量很大,请使用 memchached 作为缓存后端。

像这样的东西应该工作:

ip = request.META['REMOTE_ADDR']
has_voted = cache.get(ip)
if not has_voted:
    cache.set(ip, True)
    #code to save vote goes here
于 2009-08-05T03:40:23.043 回答
1

您可以在他们访问时向他们发送一个 cookie,然后检查该 cookie。它仍然可以被游戏,但它有点难。

于 2009-07-31T13:36:20.750 回答