所以我设计了这个投票的东西,它不会让某人在 24 小时内为同一篇文章投票两次。然而,假设一个人投票,并且在看到该人能够投票或者他处于 24 小时窗口内之后,我禁用投票按钮(顺便说一句,这都是 Ajax)。
但是,当一个人关闭浏览器并重新打开甚至刷新页面时该怎么办?显然,由于我的算法,他将无法投票,但该人最终仍会成功呼叫服务器。因此,如果他真的愿意,他会不断刷新页面并点击投票,给服务器带来不必要的负载。如何通过执行某种客户端操作或其他操作来避免这种情况?
我使用的是 ASP.NET MVC,因此会话变量是没有问题的。
我是否对此过度关注?
如果投票仅由登录(已知)的成员进行,那么您应该不会有任何问题。
另一方面,如果每个人都可以投票,那么您需要存储所有用户投票事件:
- 时间戳
- poll
- 民意调查投票
- ip
- 用户代理
- 用户唯一性cookie
所以你需要一个随机散列作为 cookie 发送出去。这将确保您不会接受同一个人对同一民意调查的另一次投票。
如果用户删除了他的 cookie,您将退回到 B 计划,即您在 24 小时内不允许来自同一 IP 和用户代理组合的投票超过(例如)10 次。
该系统并不完美,因为用户可以更改 IP 和(更容易)用户代理。您需要先进的模式检测算法来检测可疑投票。存储所有用户投票事件的好处是,您可以稍后使用调度程序处理这些事件,或者将投票外包给可以为您处理这些事件的其他人。
祝你好运
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)