投票系统,如何防止单机多投现象(也就是一台电脑只能投一次)???请大家帮忙,急~~~谢谢...

解决方案 »

  1.   

    记录ip或者mac地址是一种选择,如果该ip或者mac地址被投过了,就不记录了不过动态ip和手工该mac地址的办法就不好控制了
      

  2.   

    我指的是一台电脑只能投一次.如果记录已投过了的电脑的IP,这样不好,有可能用的是代理IP,比如一所学校,那么多台电脑,只对外一个IP.
      

  3.   

    用IP不大可能,我上面也提到了.最好能用MAC,问题是如何得到客户端的MAC地址???
      

  4.   

    有两种
    一种是客户端做标志,比如用COOKIE一种是服务端做标志,比如记IP等但这两种都是防君子不防小人的做法
    想要更改是很容易的
      

  5.   

    其实从理论上来说,你想要做的就是标志对方电脑的唯一性如果是软件的话,估计还好做
    但如果是WEB的话,我想不出什么好办法,WEB权限的控制还是蛮严的
      

  6.   

    http://blog.csdn.net/telesonico/archive/2007/08/04/1726520.aspx用js看看吧,投票的时候传递进去
      

  7.   

    记录机器的mac地址记录到数据库中然后根据mac判断是否已经投票,我以前写过一个代码给你参考
    获取mac地址Java本身没有这个能力,不过利用操作系统的命令可以做到。public static String getMACAddress() {
    String address = "";
    String os = System.getProperty("os.name");
    if ( os != null && os.startsWith("Windows")) {
    try {
      String command = "cmd.exe /c ipconfig /all";
      Process p = Runtime.getRuntime().exec(command);
      BufferedReader br =
      new BufferedReader(
      new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = br.readLine()) != null) {
        if (line.indexOf("Physical Address") > 0) {
          int index = line.indexOf(":");
          index += 2;
          address = line.substring(index);
        break;
    }
    }
     br.close();
     return address.trim();
    }
    catch (IOException e) { }
    }
    return address;
    }
      

  8.   

    你这个是得到服务器端的MAC还是得到客户端的MAC???
      

  9.   

    11楼,lsj19830812 大哥:
    我有试过那里面的代码,但JS执行有问题(错误:对象不支持此属性或方法)
      

  10.   

    用IP的话,不太好。因为大家可能使用同一个网关的。
    用用户名+IP的方式。
    先看用户名,只能投票一次。
    对于Guest,只能用IP了。想得到MAC地址,很难。需要用户端的安全系数很低。这个基本上不可能。或者控件,等等。
    用cookie是一个方式,但是未必所有的都支持cookie,就算支持,很多人都会用完就清空的。To ProvidenceZY:
    你得到服务期的MAC干什么呢?
      

  11.   

    支持通过getMACAddress这个方法比较好。
      

  12.   

    别傻啦!getMACAddress方法只能在服务器端运行,得到是服务器的MAC地址,怎能得到客户端的MAC地址呢?
      

  13.   

    如果通过MAC地址的方式可能有局限行。比如网吧的机器可能被很多人使用。但是记录mac地址就唯一了,可以通过IP地址,但是不可以重复投票,必须过一定时间在投票。我以前就是这样作的。
      

  14.   

    lsj19830812 
    李逵 
    等 级:
     发表于:2007-10-23 13:46:5811楼 得分:0 
    http://blog.csdn.net/telesonico/archive/2007/08/04/1726520.aspx 用js看看吧,投票的时候传递进去  
     
    这位兄弟的方法可以使用,  只是要求客户端对ActiveX控件做允许操作就可以,再加上   lcy_IT   的了定时间后就可以再投的思想,  
    就很不错了,
      

  15.   

    嗯 跟我想的一样
    可以做一ActiveX控件,获取客户端MAC地址或者CPU的标识什么的。
    但是做完控件可能新的问题就来了,客户端 默认IE设置无法下载,我以前是做一数字签名。
      

  16.   

    总结一下:
    1、记录IP。缺点上面已经讨论的很清楚了,我就不说了。
    2、用cookie。可能浏览器不支持cookie或者关闭cookie。
    3、用ActiveX控件,可以获得MAC,也可以用别的技术,但ActiveX一样可以被浏览器禁止,而且只能在windows平台。
    4、用Applet。类似ActiveX控件的情况。况且需要JRE支持,速度慢,优点是兼容多平台的不同浏览器。
    5、用硬件(如USBKEY)+ActiveX控件方式,可以有效防止软件模拟的问题,但成本太高了,而且也有平台问题。
    6、还没想出来
    结论:
    差不多得了。不同的方案,是要付出不同的代价的。