0

我正在尝试在 ASP.NET MVC 中编写一个 Web 应用程序,该应用程序允许每个用户为多张图片投票,但不允许他们为同一张图片多次投票。用户未经过身份验证。我应该在数据库或 cookie 中保存什么?

4

4 回答 4

6

将投票存储在具有 、 、 列的数据库表中PictureIdUserId并向Score列添加复合唯一约束- 这将确保每个用户PictureIdUserId图片只有一个投票。

于 2009-07-07T08:25:00.913 回答
3

对于匿名用户,您有两种选择,但都不是很好:

1) 使用存储在 cookie 中的用户 ID 跟踪用户。只要 cookie 存在。用户不能投票两次。但是,他们可以删除或以其他方式修改 cookie。他们可能关闭了 cookie。他们可以同时打开两个不同的浏览器。“作弊”脚本(curl http://site/vote?score=5&pic_id=1)无论如何都不会存储 cookie。基本上,你最终会得到比他们应该投票的人更多的投票。

1.5 *

2)通过IP地址跟踪用户。这基本上是相反的。用户不能投票两次,无论删除cookies、切换浏览器等。但是,同一家庭的几个人(使用DSL路由器)只能投票一次。许多公司同样会将许多用户隐藏在一个 IP 地址后面。我认为一些 ISP 也这样做(AOL?)。你最终会得到比合法记录的要少得多的“投票”。

所以问题是你想要高票还是低票?如果你认为有可能作弊,我会选择#2。但如果有可能作弊,那就意味着有诱因。如果人们意识到他们的选票没有被计算(他们可能没有意识到),他们就会不高兴。

之后,是否将每个投票存储为一行,或者将投票合并为一行(更新图片集 num_votes = num_votes + 1,total_score = total_score + [提交分数])由您决定。

  • 1.5 第三个选项是记录他们的投票和一个电子邮件地址,向他们发送带有确认链接的电子邮件,并要求他们点击它来记录他们的投票。人们仍然可以用虚假的电子邮件地址作弊,但它不像删除 cookie 那样可能。
于 2009-07-07T09:34:58.963 回答
1

正如 Daniel Brückner 所建议的那样,唯一的、经过身份验证的用户的数据库记录必须是前进的方向。Cookie 不可靠,例如,它们可能会被删除,或者用户可能使用不同的浏览器。

于 2009-07-07T08:41:43.737 回答
0

如果您的用户通过了身份验证,那么您可以保存带有图像投票的用户 ID。

如果您的用户是匿名的,那么系统倾向于将他们的 IP 地址与图像投票一起存储。它并不完美,也不是 100% 的证明,但它适用于大多数情况。

于 2009-07-07T08:50:31.347 回答