我一朋友这么想 就是把每个投票的ip放到数据库中然后每天清理一下数据库实现每天只能投一票的功能。但是如何每天清理数据库呢?我觉得不靠谱,但是又想不到有什么其他好办法。
1
hjc4869 2015 年 5 月 9 日
将投票IP 投票时间存入数据库,投票的时候检查在投票当天是否有该IP的投票记录。
|
2
imlonghao 2015 年 5 月 9 日 via Android
您就不能存多一个时间的column么?
|
3
liboyue 2015 年 5 月 9 日 via Android
不靠谱,用路由器的不得跪了
|
4
shiny PRO redis 设置过期时间
|
5
giuem 2015 年 5 月 9 日 via Android
移动宽带全省就几个ip。。
|
7
ob 2015 年 5 月 9 日 via Android
加验证码妥妥的
|
8
zeyexe 2015 年 5 月 9 日
设置cookies可能好一点,大部分人应该不知道cookies是什么
|
10
iyaozhen 2015 年 5 月 9 日 via Android
配个定时任务清呗
|
12
billlee 2015 年 5 月 9 日
配个 cron 任务就可以实现每天清理数据库
|
13
leofml 2015 年 5 月 9 日
redis ttl
|
14
rtyurtyu 2015 年 5 月 9 日
开一个4G的数组i,i[ip]==1;
到点了就delete []i再开好了 |
16
gdtv 2015 年 5 月 9 日
最靠谱的还是绑定微信,在微信里投票,一个微信号只能投一票
|
17
shootsoft 2015 年 5 月 9 日
强烈建议这种业务用redis处理。
redis的key设置直接用 ip 就行,如果ip存在,就表示存在了。 如果要限制每个IP/每天只能投一次,就每天凌晨用crontab的job清理一次redis。如果要限制每个IP,没24小时只能投放一次,就给redis的key设置一个过期时间为24小时。 |
18
loveyu 2015 年 5 月 9 日
有个问题就是部分地区IP很少,类似移动之类的,很多人直接投不了
|
19
em70 2015 年 5 月 9 日 via Android
首先不能纯IP限制,还要加上cookie,然后cookie值和IP,时间一起存到数据库。每次投票,在数据库查找12小时内的cookie值和IP记录是否与提交的信息有重复的,任一个重复都返回错误。
如果非要在24点限制,就每次投票查找今天0点到现在时间内的IP或者cookie是否重复即可。 不用考虑清空数据库,留下原始数据,还能人工K掉恶意投票。 |
20
jarlyyn 2015 年 5 月 9 日
记录一下每个人最后一次投票时间。
|
21
xiaozhizhu1997 2015 年 5 月 9 日
现在NAT盛行...采用cookies似乎更合适。
|
22
ys0290 2015 年 5 月 9 日 via iPhone
cookie过滤一遍,剩下的放服务器过滤
|
25
kslr 2015 年 5 月 9 日 via Android
话说那些自动失效的,加个投票时间戳不就行了
|
26
reeco 2015 年 5 月 9 日 via iPhone
大多数数据库支持事件的,不需要cron
|
27
issues 2015 年 5 月 9 日 ip 不行 拨号用户可以重新拨号获取新ip, 当然cookie也不行,本地cookie可以删除。mac地址,当然要想真想搞刷票, mac也貌似也可以伪造。
|
28
issues 2015 年 5 月 9 日
想要真正实现这样的不能刷票是很难的, 只有提升这种刷票的难度。难度大了,自然会放弃。
|
29
luw2007 2015 年 5 月 9 日
每个登录用户只能投一票。
可以使用openauth接入qq,weibo的账户 |
30
wusuopuBUPT 2015 年 5 月 9 日
@shootsoft +1
|
31
zyue 2015 年 5 月 9 日
redis 妥妥的
|
32
gladuo 2015 年 5 月 9 日
面向普通人就cookies~
程序员投票还是微信吧~ |
33
xiaowangge 2015 年 5 月 9 日 via Android
腾讯CMem 设置过期时间。
|
34
lwch 2015 年 5 月 9 日
redis有条命令叫setex
http://cxx.party就是这么实现的。。 |
35
hello2t 2015 年 5 月 10 日
redis存,key value 就好了,定时清理
|
36
zonghua 2015 年 5 月 10 日 via iPhone
实名认证的登录
|
37
flowerwrong 2015 年 5 月 10 日 via Android
@gdtv 淘宝分分钟刷哭你。
|
38
flowerwrong 2015 年 5 月 10 日 via Android
TTL靠谱,最好配合cookie
|
39
Septembers 2015 年 5 月 10 日 via Android
@em70
跟QQ OAuth绑到一起会更靠谱一些 一个QQ有效票数只能一次之类的 毕竟大规模注册QQ刷票是比较不现实的 如果基于IP的话去阿里云开1000个最低配的VPS一小时加高匿代理 不就一下刷起来了 |
40
crab 2015 年 5 月 10 日 还是得靠验证码。
另外票数可以不公开,结束后才公开。想刷票的也没调试环境。 |
42
sing1ee 2015 年 5 月 10 日
只考虑问题本身,一圈儿看下来,redis的方案最靠谱儿。
|
44
yaoyuan1072 2015 年 5 月 10 日 via Android
前几天正在研究这个问题,如何获得内网的IP呢?因为有时候一个公司几百号人就一个IP。。。
|
45
gamexg 2015 年 5 月 10 日
|
47
can 2015 年 5 月 10 日
基本就是楼上回复的这些了,微信绑定,IP,cookie,验证码。想防刷票的关键是看你代码怎么写了,写的好的话就能挡得住。建议楼主乌云搜索刷票,我还是想说句来回这点事,关键看你代码怎么写了。
|
51
flynaj 2015 年 5 月 10 日
这样都没用.要防止作弊就是一个用户只能投一次!
|
52
flowerwrong 2015 年 5 月 10 日 via Android
@flynaj 这样也没用,可以刷单。
|
53
s51431980 2015 年 5 月 10 日
只要在客户端,就有作弊的可能,cookie、验证码最终都敌不过廉价的人力成本
|
54
caserest OP 谢谢各位大神
|
55
handleyan 2015 年 5 月 10 日
1、要想识别一台机器的话,可以尝试使用一下cavas,即通过画cavas然后md5来唯一标识一台机器,据说能保证唯一性,我没试过,楼主试过如果有效了可以分享一下
2、在有了唯一标识之后,要想限制一天一次,如果非要用数据库,可以用乐观锁,一条update语句就行了,不过如何暴露地使用数据库在并发比较大情况下是不建议的,除非你准备搞个分布式数据库,这样成功也大了。最好是使用上面很多人提到memcached、reids等分布式内存式的存储工具,这些工具一般也都有乐观锁的实现。 |
58
powergx 2015 年 5 月 10 日
加验证码,要么用第三方账号
世界上有代理服务器,还有肉鸡,刷票是挡不住的 |
59
frankzeng 2015 年 5 月 10 日
用微信关注吧,关注了拿openid去查一下,应该能确保真实
|
60
flowerwrong 2015 年 5 月 11 日 via Android
@powergx 我也觉得挡不住,正为微信刷票而烦恼。
|
61
flowerwrong 2015 年 5 月 11 日 via Android
@frankzeng nonono,淘宝一下,一堆商家
|
63
jakehu 2015 年 5 月 11 日
我以前做的是写入数据库,每次写入前都清楚一个小时之前的
|
64
FastMem 2015 年 5 月 11 日
数据表
id,ip_address,date 1,123,123,123,123,time 然后每次投票检查日期呗。。 |
67
donghouhe 2015 年 5 月 11 日
看到说用cookie区分的,哎呀,太贴心了,代理都不用挂了!刷票代码写起来太方便了!
|
68
millken 2015 年 5 月 11 日
|
69
sun019 2015 年 5 月 11 日 via Android
只有注册用户才能投!!!其他的都是浮云,被投票搞翻过几次服务器的路过!
|
70
shepherd 2015 年 5 月 11 日
搞个手机验证码?或者直接用手机投票
|
71
miao1007 2015 年 5 月 11 日
用微信,妥妥的。
|
72
yanze0613 2015 年 5 月 11 日
每天重建一张表,投票的时候记录ip丢进去,第二天换个表
数据库自动方便可以用作业或者shell |
73
66beta 2015 年 5 月 11 日
注册登录吧,不管是自己做,还是接入第三方
|
74
roychan 2015 年 5 月 22 日
如果面对的客户大部分是小白的话,完全可以在 Session 里加一个 waterproof 给个值为1,每次收到请求判断 session 里有没有这个 key。然后 24 小时过期就行了,很节省资源。
|