Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带会话的PHP投票系统?_Php_Voting System - Fatal编程技术网

带会话的PHP投票系统?

带会话的PHP投票系统?,php,voting-system,Php,Voting System,我一直在阅读stackoverflow关于在PHP中创建投票系统以最大限度地减少来自同一用户的滥用/多次投票的内容,但我还没有找到问题的答案 我有一个应用程序,用户无需注册即可投票或“喜欢”条目。显然,我想尽量减少滥用,我不想限制每个IP地址的投票,因为一些组织(包括我的组织)使用共享IP地址 我以前从未在未经身份验证的系统中使用过会话,但由于该应用程序以进入投票为中心(用于纯粹的娱乐价值,但我仍然希望尽量减少滥用),我想知道这种方法是否可行,是否存在诸如性能影响等缺点,以及是否有可能以这种方式

我一直在阅读stackoverflow关于在PHP中创建投票系统以最大限度地减少来自同一用户的滥用/多次投票的内容,但我还没有找到问题的答案

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

我以前从未在未经身份验证的系统中使用过会话,但由于该应用程序以进入投票为中心(用于纯粹的娱乐价值,但我仍然希望尽量减少滥用),我想知道这种方法是否可行,是否存在诸如性能影响等缺点,以及是否有可能以这种方式使用会话:

  • 加载网站时启动会话
  • 每次会议允许对每个项目进行一票表决
如果这是一个坏主意,我的备选方案是允许每个IP地址有合理数量的投票(比如25),或者在来自同一IP地址的投票之间设置一个时间限制


你们推荐什么/你们认为对用户来说最烦人的是什么?重新启动浏览器、在投票之间等待5分钟或清除Cookie?

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

如果没有用户身份验证,真的无法创建一个“严肃”的投票系统,所有其他选项都有缺陷:

  • 当你关闭浏览器时,会话就结束了,所以只要重新打开它,你就新鲜了
  • 饼干是你最好的选择,但它们可以被清除,甚至被拒绝
  • ip地址不可靠和/或不适用

    • 我同意肯普的观点,饼干是最好的选择。此外,会话也使用cookie——不同之处在于,当浏览器关闭时,会话cookie会被删除;当浏览器过期时,会话cookie会被删除,这在本例中是“更好的”

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


      投票结束后,有人可能会查看结果,看看是否有可疑的内容(比如5分钟内从单个IP获得100张选票),这将有助于获得更真实的结果。

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


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

      我建议不要将结果用于娱乐价值以外的任何内容。浏览器关闭时,会话不会自动结束。您可以创建持续一个生命周期(或至少直到删除cookie)的会话。在这方面,它们等于您的选项#2,因为会话是使用cookie实现的。根据默认行为,do会在浏览器关闭时自动结束。你可以改变这一点,但是你会遇到与cookies相同的问题。会话也可以在没有cookie的情况下工作。为什么每个人都说当浏览器关闭时会话结束?那是胡说八道。这取决于所使用的会话/cookie的类型。我之所以这么说,部分是因为我在关闭浏览器时会清除cookie,并鼓励其他人也这样做。deceze,这是因为使用
      session\u start()