我的做法是用Cookies记录用户的IP和所投选手的ID,如果用户的IP和选手的ID在Cookies中存在,就显示你已投票图片,否则就显示请你投票图片,代码如下 string vote = "," + row["id"];
if(Request.Cookies["Vote"] != null)
{
if(Request.Cookies["Vote"]["IP"] == Request.ServerVariables["REMOTE_ADDR"] && Request.Cookies["Vote"]["ID"].IndexOf(vote) >= 0)
{
voteImage = "<img src=\"Images/vote.jpg\" alt=\"您已投票\" vspace=\"3\" border=\"0\" style=\"cursor:hand;\">";
}
vote += "," + Request.Cookies["Vote"]["ID"];
}
TimeSpan span = new TimeSpan(1, 0, 0, 0);
HttpCookie cookie = new HttpCookie("Vote");
cookie.Values.Add("IP", Request.ServerVariables["REMOTE_ADDR"]);
cookie.Values.Add("ID", vote);
cookie.Expires.Add(span);
Response.Cookies.Add(cookie);
但现在会出现个问题是:用户投了一位选手的票后,图片变成你已投票,打开一个新页面,投另一位选手的票,再回到此页面,刷新一下,图片又变成请你投票,用户又可以投此选手的票了,请问是什么原因啊?
有什么好的办法吗?我这段代码是不是存在什么错误啊?怎么防止?
谢了

解决方案 »

  1.   

    投票的时候把IP加入数据库,再投如果有IP一样就不准再投了。
      

  2.   

    主要是靠记录和对比IP。cookie没用的,但不料自动清除客户端cookie。
    欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  3.   

    上面都已经说了
    我就讲下获取客户端IP的方法:
    Page.Request.UserHostAddress;
      

  4.   

    就我个人认为没有最好的办法,ip也不准,如局域网只要一个ip投完,这个网内其他就不能投了,还有的是动态ip如个人用户,不准。
      

  5.   

    做一个投票记录表就可以咯。然后将IP和投票的账户信息存起来。这样你可以随心所欲的判断啦
    看看是按IP还是按用户咯
      

  6.   

    一个ip只让投一次ADSL,我重新申请IP分配再投!
      

  7.   

    投票的时候把IP加入数据库,再投如果有IP一样就不准再投了。
    正解~
      

  8.   

    正是程度写多了,就连,政府部门中用公务员号+密码+域+IP都能作弊,你们还IP-_-#!
      

  9.   

    绝对的防作弊很难,楼上的似乎可以防止,但是更换IP和清除COOKIE都很容易
    用手机投票是个好办法,技术上又很难