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