我有一个网站,用户可以在这里发帖和投票。允许访客用户投票支持一个帖子是非常重要的,避免同一访客多次投票也是非常重要的。
Cookie,可以很容易地删除,所以这不是解决方案。
IP,如果考虑NAT情况,则非常糟糕。
所以我想,我需要更先进的方法,也许还有其他类型的饼干。。?
如果有人有类似的经历,请提供帮助。
对于未登录的用户,你只能做的是尽可能让他们第二次投票。例如,您可以:
在客户端:
- 设置cookie
- 将信息写入浏览器存储
- 使用所谓的flash cookie
在服务器端-尽可能多地存储和检查有关用户的信息:
- 存储用户ip(包括代理ip等)
- 存储浏览器指纹
- 存储用户时区
- 阻止此ip和浏览器指纹的投票(永久或一段时间)
等等。
但你仍然无法阻止聪明人和真正想欺骗匿名用户投票的人。
因此,不试图阻止投票,而是检测并忽略"重复"投票可能更有用(即,在特定时间段内,来自同一ip和浏览器组合的同一选项的投票可能被视为"作弊")。
是的,唯一半完美的解决方案是跟踪IP地址。您可以将它们永久存储在表中,也可以将它们缓存在Memcache或类似文件中一段时间。当然,如果用户已经登录,最好的方法是简单地检查用户是否已经投票。
会话和Cookie是无用的,因为人们可以简单地编写一个忽略会话数据的自动投票算法。
如果用户是匿名的,并且不必进行身份验证,则无法阻止这种情况。
如果有人真的想投票几次,用户可以在另一台设备上打开页面并再次投票,即使你可以用一种永久cookie识别他/她的设备。
你似乎已经预料到有用户会删除他们的cookie,以便能够再次投票。你无法阻止他们,但你可以让事情变得更难。