[待解决问题] 做一个在线投票系统,一般怎样防止重复投票
提问时间: 2008-04-16 20:09
悬赏分:50 该问题已到期 浏览:332 次
做一个在线投票系统,一般都有那些方式来防止重复投票?

1. Cookies: 如果客户端禁用了cookies怎么办?
2. IP地址:如何确保局域网内多个用户的投票?

或者还有其他的方案,越详细越好。谢谢

提问者:Colin Han - 小虾三级
所有回答(6)
基本上也就cookie和ip这两种手段了.
我能想到的最好的方案也就是两种方法相结合.

你所提到的问题,由于http的局限,基本上没有办法解决.
4周前   回答者:deerchao - 老鸟四级
如果能够获取网卡地址就好办了
不过记得之前看过这个好像是不行的。
4周前   回答者:暗香浮动 - 菜鸟二级
cookies禁用倒是小问题,你可以禁止他投票,怕得是投一次票清一次cookies,程序很容易实现,刷票在所难免
ip肯定会限制住网吧用户和公司用户,但想刷票依然有办法,找个ADSL写程序不停的拨号断线,也可以刷出不少
没有好的办法,差不多就行了,除非你要求所有用户注册才能投票,就算是这样,你也得防止他们乱注册,最BT的可以考虑做身份证验证注册,哈哈,搞大了,不好玩儿
4周前   回答者:丁学 - 老鸟四级
这个,要看你投票对于精度的需求如何
话说,对于一般匿名投票的样本容量,局域网内多个用户无法投票造成的误差在统计的角度上完全可以忽略不计,所以基本上用ip就行了
当然,如果你的投票人数比较少那就另当别论,不过话又说回来了,样本容量太小的话,这个投票的结果本身就没太大意义……
4周前   回答者:棕熊 - 菜鸟二级
再加个验证码...
4周前   回答者:wingoo - 小虾三级
在线投票,希望投票的统计数据准确度要高,那么需要多高呢?
要求的准确度不同那么采用的方法不同,实施的成本和繁琐度不同。同时要求开发者要理解确定投票人身份有哪几种方法。
1、认为一台计算机是一票(不现实,但对要求度不很高时,可以这么假设,统计误差一般不会太大)
网友deerchao、暗香浮动等说的用Cookie、IP或是网卡MAC地址等都是为了确定是同一台计算机。

这种方法适合公开的无记名投票,也就是说只能在一定范围内防止作弊,但不能排除作弊。
2、认为一个人是一票(比较准确,但很难做到不同计算机上的人是同一个人,或同一计算机上有不同的人)
网友丁学所说可以注册用户再投票,就是确立人的一种方法。然而此做法也不能排除一人注册多用户的作弊行为。

附:网友wingoo所说的加验证码的过程是可以防止挂机程序进行投票。人为重复投票是不可避免,但是这种工作一般对太大价值的投票过程,人们总是很害怕麻烦,不愿过多的去人为重复投票。

对高准确率而言,最佳的方法是上述两种方法结合后并在最大限度内控制作弊行为,提供如下方法:
想想现实世界选人民代表时是如何投票的(发放选民证——召集并发放选单——依次递交选单——统计选单数量),都是在知道有多少选民的情况下投票的。
如果你的投票级别要求很高,并且有条件则可以和公安部的身份证系统相连接,注册时必须输入身份证号,那么投票时输入身份证号,为了安全在写些日志记录每个投票的计算机信息及投票过程。这样就可以保证一人只头一次票了。(这也不是百分之百的正确,只能是将重复投票的可能性降低到最低)
如果你做不到,那么就只能在放宽些,将登录注册信息弄详细些,并且一旦有必输入项(姓名、性别、密码及安全问题等类似项除外)的重复记录则不能被注册成功,且记录注册的计算机信息,此计算机将不能再注册此用户名,若计算机信息都相同。
总之一句话就是,最大可能地增加用户希望重新投票的复杂度,越复杂越没有人愿意多次投票(图片验证码是可以防止机器投票的,建议使用)。

赠言:其实在线投票为何使用任何方法都不能达到完全准确呢,那是因为对投票过程缺少监督机制,如果你能让你的服务端程序起到监督投票过程的作用,即把投票过程和结果都记录,并交给你的监督机制进行分析。再增加重复投票的繁琐性,相信可以过滤到不少废票,和少出现废票。
3周前   回答者:刚刚 - 小虾三级
3周前   Colin Han :
看起来高人还没有到啊。没有有价值的东西啊。
3周前   丁学 :
不是高人没到,而是事实已经很清楚,没有完美解决方案,只能如此了,看需求做方案,求最大化效益比吧
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除