你如何处理公众投票(任何人都可以"喜欢或不喜欢"一篇文章)并限制他只能投票一次?
我必须用饼干吗?(问题是他可以删除cookie并投票x999次)还是我将他的IP存储在数据库中?
解决方案有三个部分:
- 使用cookie防止双重投票
- 将所有投票事件存储在数据库中(ip、用户代理、投票/文章id、投票)
- 实现每24小时运行一次的算法来删除从#1逃脱的双重投票。算法将使用#2的数据
只使用IP是不合适的,因为它会让大量的人退出投票系统。
使用IP。
虽然你可能会导致一群人在一个IP后面只投票一次,但其他选择很难绕过(不要存储cookie)。
我会说两者都做,这样,如果有人拥有动态IP,他们将不得不同时更改IP和删除cookie。
如果用户进行了身份验证,即他们以自己的身份投票,则在数据库中抛出一条记录,说明用户已经投票。对于匿名选民,您只能使用Cookie、本地存储等。
可以使用evercookie代替cookie,这更难绕过(但仍然可能)。
evercookie是一个javascript API可提供的浏览器中的持久cookie。它的目标是识别客户在他们删除标准之后Cookie、Flash Cookie(本地共享对象或LSO)以及其他。