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