如何防止来宾用户为 post 投票两次?

How to prevent guest users from voting twice for a post?

我有一个网站,用户可以在其中 post 并为 post 投票。允许来宾用户投票给一个 post 非常关键,避免同一来宾多次投票也很重要。

Cookies,很容易删除,所以这不是解决办法。

IP,如果你考虑NAT情况就很糟糕了。

所以我想,我需要更高级的方法,也许其他类型的 cookies..?

如果有人在类似情况下有经验,请帮助。

是的,唯一半完美的解决方案是跟踪 IP 地址。您可以将它们永久存储在 table 中,或者将它们缓存在 Memcache 或类似设备中一段时间​​。当然,如果用户已登录,最好的方法是简单地检查用户是否已经投票。

会话和 Cookie 是无用的,因为可以简单地编写一个忽略会话数据的自动投票算法。

如果用户是匿名用户且无需进行身份验证,则无法阻止。

如果有人真的想多次投票,用户可以在另一台设备上打开页面并再次投票,即使您可以用一种永久性 cookie 识别 his/her 设备。

您似乎已经预料到会有用户删除他们的 cookie 以便能够再次投票。你无法阻止他们,但你可以让它变得更难。

对于未登录的用户,您唯一能做的就是尽可能地让他们难以进行第二次投票。例如,您可以:

在客户端:

  • 设置 cookie
  • 将信息写入浏览器存储
  • 使用所谓的 flash cookies

在服务器端 - 尽可能多地存储和检查有关用户的信息:

  • 存储用户ip(包括代理ip等)
  • 存储浏览器指纹
  • 存储用户时区
  • 阻止对此 ip 和浏览器指纹的投票(永久或一段时间)。

等等

但你还是挡不住聪明,真的想骗取匿名用户的投票。

因此,不尝试阻止投票而是检测并忽略 "duplicate" 投票可能更有用(即可以考虑在特定时间段内从相同的 ip 和浏览器组合对相同的选项投票"cheated").