代码之家  ›  专栏  ›  技术社区  ›  Jiaaro

Django的防垃圾邮件计数器

  •  3
  • Jiaaro  · 技术社区  · 15 年前

    我已经看过最流行的django计数器解决方案,它们似乎都没有解决垃圾邮件刷新按钮的问题。

    我真的需要记录 每位游客 防止他们人为地增加页面视图计数 垃圾邮件刷新按钮 (或者写一个快速而肮脏的脚本为他们做这件事)?

    更多信息

    所以现在您可以用下面几行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日志记录,因为有几个用户人为地增加了他们的视图计数。不是因为他们是坏人,甚至是坏用户。

    请参阅有关解决缓存问题的答案…我要先走那条路。将更新结果。

    就其价值而言,似乎堆栈溢出正在使用cookie(我不能增加自己的视图计数,但当我在另一个浏览器中访问该站点时,它会增加。)

    我觉得好处太多了,这种“欺骗”现在太容易了。

    谢谢大家的帮助!

    3 回复  |  直到 14 年前
        1
  •  8
  •   Jiaaro    15 年前

    登录IP可能是最安全的。这并不完美,但它比曲奇好,对用户来说比注册更不烦人。也就是说,我建议不要费心把这些保存在数据库中。相反,使用Django的 low-level caching framework . 密钥是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
    
        2
  •  8
  •   RHSeeger    15 年前

    没有一种万无一失的方法可以防止有人人为地增加计数。相反,你愿意在多大程度上花时间让他们更难做到:

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

    所以,最后,你只需要选择你想做的努力的程度,以防止用户滥用系统。

        3
  •  1
  •   Edward Dale    15 年前

    你可以在他们访问时给他们发送一个cookie,然后检查这个cookie。它仍然可以玩,但有点难。