Django中的防垃圾邮件命中计数器

Django中的防垃圾邮件命中计数器,django,spam-prevention,hit-count,Django,Spam Prevention,Hit Count,我已经看过了最流行的Django点击计数器解决方案,但似乎没有一个能解决垃圾邮件刷新按钮的问题 我真的需要记录每个访问者的IP吗?,以防止他们通过滥发刷新按钮(或编写一个快速而肮脏的脚本)来人为提高页面浏览量 更多信息 现在,您可以使用以下几行Python代码来增加视图数量。这是如此之小,以至于您实际上不需要编写脚本,您可以将其键入交互式会话: from urllib import urlopen num_of_times_to_hit_page = 100 url_of_the_page =

我已经看过了最流行的Django点击计数器解决方案,但似乎没有一个能解决垃圾邮件刷新按钮的问题

我真的需要记录每个访问者的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日志记录,因为有几个用户人为地夸大了他们的视图数量。这并不是说他们是坏人,甚至不是坏用户

查看有关解决缓存问题的答案。。。我要先沿着那条路走。将更新结果。

值得一提的是,堆栈溢出似乎是在使用cookies(我无法增加自己的视图计数,但当我在另一个浏览器中访问该站点时,它会增加)

我认为好处太多了,现在这种“欺骗”太容易了


谢谢大家的帮助

当他们访问cookie时,您可以向他们发送cookie,然后检查cookie。它仍然可以玩,但有点难。

没有简单的方法可以防止有人人为地夸大计数。相反,你愿意花多少时间让他们更难做到这一点:

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

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

记录IP可能是最安全的。它并不完美,但它比cookies更好,对用户来说也比注册更不麻烦。也就是说,我建议不要费心把这些保存在数据库中。相反,使用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

现在,您可以使用一个4行python脚本来增加视图计数:(从urllib导入urlopen;对于范围(100)中的x:urlopen('))将其设置为一个2行python脚本:(我应该补充一点,您需要将缓存TTL设置为合理的值,比如一个小时:cache.set(ip,True,60*60)谢谢…这比我认为我必须要做的大而慢的db ip日志记录要好得多,也简单得多…我必须记住以后不要再傻了;)