如何确保用户只能在ASP.NET轮询上投票一次

时间:2009-02-07 01:16:42

标签: c# asp.net ip-address

我正在尝试进行一次ASP.NET(C#)调查,该投票会询问用户是/否问题并将该投票记录到数据库中。为了防止垃圾邮件,我希望能够确保用户只能投票一次。我考虑过记录用户的IP地址。如果这是答案,有人可以给我一个教程,说明如何实现这一目标。如果这不是答案,请告诉我你的建议。

编辑:我不是要求用户注册,因为这不是我的网站。

8 个答案:

答案 0 :(得分:13)

如果您可以对用户进行身份验证,则您只能认定每个用户都有一票。因此,您需要一种身份验证机制,以防止用户注册多个帐户。

我只能在用户在其帐户中投入资金的环境中看到此作品,例如在线报纸的订阅者或在StackOverflow上的信誉系统。

答案 1 :(得分:4)

如果您有注册用户列表,请向他们发送包含生成包含guid的唯一链接的电子邮件(例如),将GUID记录在数据库中并匹配投票。

如果您所说的通常是公开可访问和安全的,那么IP地址本身是不够的(谷歌电子选举投票涉及安全公众投票涉及的许多问题)。

您是否考虑过使用其中一种免费投票服务?

Condorcet Internet Voting Service

答案 2 :(得分:4)

您不能将单个投票限制为一个IP地址。 IP地址不等于单个用户。 IP地址代表一个或多个用户。

答案 3 :(得分:3)

IP地址也不适用于在代理服务器背后工作的数百万人。

Cookie是部分解决方案,但投票机器人可能无法发送Cookie。

答案 4 :(得分:2)

登录会话是防止双重投票欺诈的唯一方法,但由于您明确要求记录IP地址的方法,您可以通过以下方式实现:

HttpContext.Current.Request.UserHostAddress;

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

应该很容易保存到DB并检查每次轮询是否已经存在IP。

答案 5 :(得分:1)

进行注册,要求确认注册电子邮件,并确保电子邮件地址是用户中数据库中的唯一列。然后将投票与电子邮件地址联系起来。它不会完全阻止有多个电子邮件地址的袜子木偶,但它至少会让大多数人不值得努力。

答案 6 :(得分:0)

IP和useragent的组合可以为您提供合理的解决方案。

答案 7 :(得分:0)

我同意单个IP地址与单个用户不对应,但我认为这是保持每人一票的最安全方式。我通常使用cookie来跟踪投票的人。当然,这是一个简单的黑客,你可以删除cookie,然后再次投票。如果投票只是一些随机的东西,那么我真的不在乎。如果正确的投票对您的申请非常重要,那么请使用IP地址。