2010-04-21 111 views
3

我一直在阅读关于在PHP中创建投票系统,最大限度地减少来自同一用户的滥用/多个投票的stackoverflow,但我还没有遇到我的问题的答案。带有会话的PHP投票系统?

我有一个应用程序,用户不需要注册投票或“喜欢”一个条目。很显然,我想尽量减少滥用,并且我不想限制每个IP地址的投票数,因为有些组织(包括我的)使用共享IP地址。

我从来没有在未经过身份验证的系统中使用会话,但由于此应用程序是围绕入场票(纯粹用于娱乐价值,但我仍想尽量减少滥用)为中心,我想知道这种方法将工作和是否有任何缺点,如性能影响,以及是否它甚至有可能以这种方式来使用会话:

  • 开始当网站加载会话
  • 允许每个会话
  • 每个项目的一票

如果这是一个坏主意,我的备选方案是允许每个IP地址的合理数量的投票(比如25),或者在来自同一IP地址的投票之间放置一个时间限制。

你们推荐什么/你认为最令人讨厌的用户是什么?重新启动浏览器,等候5分钟或清除cookie?

+0

我建议不要将结果用于娱乐价值以外的任何其他用途。 – gnud 2010-04-21 08:44:59

回答

1

只有会话是个坏主意,因为如果关闭浏览器并再次来,您将能够投票。你可以使用会话作为“帮助”。最好的选择是使用IP限制。你也可以使用cookies,但它又是一个“助手”,因为你可以从浏览器中清除cookie。 我建议你使用ip限制,就像你说的,一个ip可以投票25次,并使用cookie来限制计算机不止一次投票。因此,如果用户想要多次投票,他可以删除一个cookie,但他将无法投票超过25次。

5

实在是没有办法让无需用户认证的“严肃”的投票系统,其他所有选项都有缺陷:

  • 会议结束的时候,你关闭浏览器,所以才重新打开它,找你新鲜
  • 饼干是你最好的射门,但它们可以被清除或甚至拒绝
  • IP地址是不可靠的和/或不适用
+0

当浏览器关闭时,会话不会自动结束。您可以创建持续一生的会话(或至少在cookie被删除之前)。在这方面,他们等于您的选项#2,因为会话是使用cookie实现的。 – deceze 2010-04-21 09:05:07

+0

按照默认行为,浏览器关闭时do自动结束。你可以改变它,但是你有和cookie一样的问题。会话也可以不用cookies。 – 2010-04-21 11:36:27

1

我肯普认为,饼干是最好的选择。此外,会话也使用cookies--不同之处在于会话cookie在浏览器关闭时被删除,“简单”cookie在到期时被删除,在这种情况下“更好”。

如果谈论IP地址,用户可以使用代理绕过“IP过滤”。

当投票结束时,有人可能会通过结果查看是否有任何可疑(如5分钟内来自单一IP的100票) - 这将有助于获得更真实的结果。

+1

当浏览器关闭时,为什么每个人都说会话结束?这是无稽之谈。这取决于使用的会话/ cookie的类型。 – deceze 2010-04-21 09:06:24

+0

好吧,我说这部分是因为我关闭浏览器时清除了cookies,并鼓励其他人也这样做。 – gnud 2010-04-21 12:27:13

+1

deceze,这是因为它*标准* PHP的行为,当使用'session_start()' – binaryLV 2010-04-22 08:06:31

0

您可以同时使用cookie和apc/memcached等服务器缓存机制。将投票结果存储在cookie中,并使用相同的密钥/ cookie名称存储在apc缓存中,然后检查两者是否存在。如果cookie被删除但apc键仍然存在,那么您知道某人正在尝试重新投票,并且您可以重置该cookie并增加apc缓存值的生存期。

这不是防弹的,但在没有数据库的情况下,我认为这是一个很好的解决方案。请记住,如果服务器耗尽ram,它将刷新apc缓存。

+0

只是出于好奇,为什么投票呢? – 2012-01-04 11:16:34