【发布时间】:2009-10-21 05:07:31
【问题描述】:
我有一个网页,人们来那里投票。 但我希望每个人都只投一票! 请帮助我编写 c# 代码。
【问题讨论】:
我有一个网页,人们来那里投票。 但我希望每个人都只投一票! 请帮助我编写 c# 代码。
【问题讨论】:
您可以采取几种不同的方法。
一种方法是记录每个人的 IP 地址。问题是很多人都在路由器后面。如果您阻止用户通过 IP 地址投票,那么您可能会阻止尚未投票的人。
第二种方法是要求用户登录。这是防止用户多次投票的最可靠方法。也是参与度最高的。使用 ASP.NET 成员资格提供程序可以减少很多工作。
第三种方法是在用户的计算机上设置一个cookie。他们可以轻松删除 cookie,但大多数用户不知道他们在那里,也并不真正关心。
【讨论】:
这是一个棘手的问题,我很确定您必须以某种方式进行权衡。
检查 IP,如 how to find client info in asp.net 和 HTTP_FORWARDED 问题是任何 IP 都容易被欺骗,两个人可以使用同一台计算机和/或拥有动态 IP:s
发送一封确认邮件
用户必须在您的系统中注册
需要一个 OpenId
我会选择 4 号
【讨论】:
使用此语句获取 IP。
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
当人们投票时,将 IP 存储在数据库中并检查他们第二次来的时间
或
您可以在客户端cookie中存储一些信息并第二次检查
【讨论】:
如果您想要简单可靠的解决方案,只需使用Cookie mechanism。
首先你必须尝试读取 Cookie:http://msdn.microsoft.com/en-us/library/aa287533%28VS.71%29.aspx
HttpCookie myCookie = new HttpCookie("MyTestCookie");
myCookie = Request.Cookies["MyTestCookie"];
if (myCookie != null)
//User has already voted.
else
//User can vote.
如果 cookie 不存在,您允许投票,投票后您只需在响应中写入 cookie:http://msdn.microsoft.com/en-us/library/aa287547%28VS.71%29.aspx。
HttpCookie myCookie = new HttpCookie("MyTestCookie");
Response.Cookies.Add(myCookie);
【讨论】:
从远程机器获取 MAC 地址,并跟踪它。
want to get mac address of remote PC
但是,这在 C# 中会更复杂,因为我有理由确定您不能使用 .NET 来做到这一点,因为您需要使用 ManagementObjects,这可能不起作用。
但是,如果您从 asp.net 执行此操作,则可以通过将 Java 嵌入到 asp.net 页面中并在必要时调用它来执行 Java 操作。
【讨论】: