我一直在阅读有关在PHP中创建投票系统的stackoverflow,以尽量减少来自同一用户的滥用/多次投票,但我没有遇到我的问题的答案。
我有一个应用程序,用户无需注册投票或“喜欢”条目。显然,我想尽量减少滥用行为,我不想限制每个IP地址的投票,因为一些组织(包括我的)使用共享的IP地址。
之前我从未在未经过身份验证的系统中使用会话,但由于此应用程序以入门票为中心(仅用于娱乐价值,但我仍然希望尽量减少滥用)我想知道这种方法是否会工作以及是否存在诸如性能影响之类的缺点,以及是否甚至可以以这种方式使用会话:
如果这是一个坏主意,我的替代选择是允许每个IP地址(例如25)有合理数量的投票,或者在来自同一IP地址的投票之间设置时间限制。
你们推荐什么/你认为对用户来说最烦人的是什么?重新启动浏览器,在投票之间等待5分钟或清除cookie?
答案 0 :(得分:5)
没有用户身份验证就没有办法制作一个“严肃”的投票系统,所有其他选项都有缺陷:
答案 1 :(得分:1)
只有会话是个坏主意,因为如果您关闭浏览器并再次访问,您将能够投票。您可以将会话用作“帮助”。最好的选择是使用ip限制。你也可以使用cookies,但它只是一个“帮手”,因为你可以从浏览器中清除cookie。 我建议你像你说的那样使用ip限制,一个ip可以投票25次并使用cookie限制计算机多次投票。因此,如果用户想要多次投票,他可以删除一个cookie,但他将无法投票超过25次。
答案 2 :(得分:1)
我同意kemp认为cookies是最佳选择。此外,会话还使用cookie - 区别在于会话cookie在浏览器关闭时被删除,“简单”cookie - 当它到期时,在这种情况下“更好”。
如果谈论IP地址,用户可以使用代理绕过“IP过滤”。
投票结束后,有人可能会通过结果查看是否有任何可疑之处(例如5分钟内来自单个IP的100票) - 这将有助于获得更真实的结果。
答案 3 :(得分:0)
您可以使用Cookie和apc / memcached等服务器缓存机制。使用相同的密钥/ cookie名称将结果存储在cookie和apc缓存中,并检查两者是否存在。如果cookie被删除但apc密钥仍然存在,那么你知道有人正在尝试重新投票,你可以重置cookie并增加apc缓存值的生命周期。
这不是防弹,但在没有数据库的情况下,我认为这是一个很好的解决方案。请记住,如果服务器用完ram,它将刷新apc缓存。