我正在制作一个带有投票系统的网站(使用 PHP、JavaScript 和 MySQL),该系统允许人们匿名投票,但只能投票一次。
这意味着我的系统必须知道谁投票(因为我必须检查用户是否已经投票)但我不想将用户名或用户的 IP 地址存储在数据库中(破坏匿名性)。我不知道如何开始,我需要一些指导;我应该寻找什么?
我正在制作一个带有投票系统的网站(使用 PHP、JavaScript 和 MySQL),该系统允许人们匿名投票,但只能投票一次。
这意味着我的系统必须知道谁投票(因为我必须检查用户是否已经投票)但我不想将用户名或用户的 IP 地址存储在数据库中(破坏匿名性)。我不知道如何开始,我需要一些指导;我应该寻找什么?
你最糟糕的问题是如何确保你的用户只投票一次,但这不是问题的重点:你问的是如何确保匿名性
这相当简单:将您用于单次投票的任何内容都视为密码,然后对其进行哈希处理。因此,为了论证的缘故,让我们说您正在使用 IP。我知道这样做的问题,但让我们假设这是您的选择。
请注意,这是关于匿名性,而不是关于如何确保单一投票。
正如 Lix 所说,在不存储 IP 地址或强制用户注册的情况下,真正唯一的方法是存储链接到会话的 Cookie,但这当然不是解决方案,因为 Cookie 很容易被清除。
您可以尝试使用持久性 Cookie 解决方案,例如evercookie,但如果我是一个网站的用户,它实现了类似的东西,这比注册更让我烦恼,而且无论使用什么方法,他们总是可以被规避以删除 Cookie/识别信息。
另一种可能性是另一种形式的持久性 Cookie,它在去年(或者是 2012 年 - 我忘记了)得到了很多宣传,它利用 Flash 来存储 Cookie。这些 Cookie 可以在多个浏览器中访问。一个这样的解决方案是flash-cookie,但同样,这可能会惹恼用户,并且不会 100% 可靠,因为并非所有用户都启用或安装了 Flash。