投票 - 从客户端停止滥用 - ASP.NET MVC

TPR*_*TPR 3 asp.net-mvc client-side

所以我设计了这个投票的东西,它不会让某人在 24 小时内为同一篇文章投票两次。但是,假设一个人投票,并且在看到该人能够投票或他在 24 小时窗口内失败后,我禁用了投票按钮(顺便说一句,这都是 Ajax)。

但是当一个人关闭他/她的浏览器并返回甚至刷新页面时该怎么办?显然,由于我的算法,他将无法投票,但此人最终仍会成功调用服务器。因此,如果他真的想要,他会不断刷新页面并单击投票并给服务器带来不必要的负载。如何通过做某种客户端的事情来避免这种情况?

我正在使用 ASP.NET MVC,所以会话变量是不可能的。

我是不是太在意这个了?

che*_*vim 5

如果投票仅由登录(已知)成员进行,那么您应该没有任何问题。

另一方面,如果每个人都可以投票,那么您需要存储所有用户投票事件:

  • 时间戳
  • 轮询
  • poll_vote
  • ip
  • 用户代理
  • 用户唯一性 cookie

所以你需要一个随机散列作为 cookie 发送出去。这将确保您不会接受同一个人对同一民意调查的另一票。

如果用户删除了他的 cookie,您将退回到计划 B,在该计划 B 中,您在 24 小时内不允许来自同一 IP 和用户代理组合的超过(例如)10 票。

该系统并不完美,因为用户可以更改 IP 和(更容易)用户代理。您需要高级模式检测算法来检测可疑投票。存储所有用户投票事件的好处是您可以稍后使用调度程序处理这些事件,或者将投票外包给可以为您处理它们的其他人。

祝你好运