日期:2014-05-18  浏览次数:20924 次

投票【用户IP限制】
现在需要做一个投票的功能,但是遇到了一个问题,同一个公司的对外的IP地址是相同的,这样就会导致我投票过后,本公司的其它人无法投票了。
我使用获取IP的方法是request.getRemoteAddr();

请问有什么办法可以让本公司的每台机子都可以投票,但是每个用户只能投一次票呢?

------解决方案--------------------
在表中加入一个字段吧,投了就设置一个值,以后如果再投的话用ajax查询一下,如果已经投了就用js把投票按钮设置不可点击,这样只查一下就行了。
------解决方案--------------------
看你怎么设计,看是从数据库账号上控制,还是从当前ip上控制,如果访问不大的话,可以用数据库设计,然后每天12点后就清空投票的标识
------解决方案--------------------
IP一样了,那就查MAC地址吧
------解决方案--------------------
二楼的那个方法应该是不可用的,浏览器刷新一下又恢复初始态了。
至于4楼的方法,写一个程序确实能通过IP查MAC地址,但是一个公司返回IP地址相同的话也只是会返回一个MAC而已。
如果是公司只是通过内网投票的话,4楼的方法可以试一下,
要不这问题是无解的。
------解决方案--------------------
不记名投票的话,一般用cookie标记客户端是否已经透过票了,但不能防止作弊。
------解决方案--------------------
在客户端做标记!可以尝试一下!
------解决方案--------------------
记录用户id 
------解决方案--------------------
引用:
二楼的那个方法应该是不可用的,浏览器刷新一下又恢复初始态了。
至于4楼的方法,写一个程序确实能通过IP查MAC地址,但是一个公司返回IP地址相同的话也只是会返回一个MAC而已。
如果是公司只是通过内网投票的话,4楼的方法可以试一下,
要不这问题是无解的。
可以的,你如果刷新了,从数据库里读出来的状态就是已经投票过的了,就可以用jsp标签判断一下就行 
------解决方案--------------------
String ip = request.getHeader("x-forwarded-for");
if (null == ip 
------解决方案--------------------
 ip.length() == 0 
------解决方案--------------------
 "unkown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (null == ip 
------解决方案--------------------
 ip.length() == 0 
------解决方案--------------------
 "unkown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (null == ip 
------解决方案--------------------
 ip.length() == 0 
------解决方案--------------------
 "unkown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
------解决方案--------------------
你们都是在同一个局域网,当然是同一个ip啊, 除非用代理IP去模拟访问你的投票系统
------解决方案--------------------
也不是不可能,对面局域网有台服务器给你做中转就可以,在对面服务器获取相对MAC当参数转接到你自己的服务器上做唯一标识。 IP是不靠谱的,动态IP,路由重启一下IP就变了。

也可以桥接对面路由器,也可以直接获取相应MAC。


不用那么精确地做法:写cookie 作弊几率较高。

比较精确地办法: 做个程序,投票的时候自动往对面的机子上的一个路径写个文件。你懂得~  不易发现的
------解决方案--------------------
哥们,用缓存控制吧,其他的都很蛋疼