怎么实现每天每个 ip 有且只能投一票的功能

2015-05-09 17:29:33 +08:00
 caserest

我一朋友这么想 就是把每个投票的ip放到数据库中然后每天清理一下数据库实现每天只能投一票的功能。但是如何每天清理数据库呢?我觉得不靠谱,但是又想不到有什么其他好办法。

9598 次点击
所在节点    程序员
75 条回复
hjc4869
2015-05-09 17:35:37 +08:00
将投票IP 投票时间存入数据库,投票的时候检查在投票当天是否有该IP的投票记录。
imlonghao
2015-05-09 17:40:36 +08:00
您就不能存多一个时间的column么?
liboyue
2015-05-09 17:52:02 +08:00
不靠谱,用路由器的不得跪了
shiny
2015-05-09 17:52:25 +08:00
redis 设置过期时间
giuem
2015-05-09 17:52:56 +08:00
移动宽带全省就几个ip。。
ssacpklnm
2015-05-09 17:55:21 +08:00
@giuem 这个2333
ob
2015-05-09 17:58:49 +08:00
加验证码妥妥的
zeyexe
2015-05-09 18:04:25 +08:00
设置cookies可能好一点,大部分人应该不知道cookies是什么
hjc4869
2015-05-09 18:04:46 +08:00
@ob 验证码可以找几个大妈帮忙刷票,一个小时刷几千票没啥问题。。
iyaozhen
2015-05-09 18:22:13 +08:00
配个定时任务清呗
cvmax
2015-05-09 18:57:09 +08:00
@zeyexe 非得补一刀。挺好。
billlee
2015-05-09 18:58:27 +08:00
配个 cron 任务就可以实现每天清理数据库
leofml
2015-05-09 19:51:45 +08:00
redis ttl
rtyurtyu
2015-05-09 19:58:20 +08:00
开一个4G的数组i,i[ip]==1;
到点了就delete []i再开好了
wolong
2015-05-09 20:01:49 +08:00
@zeyexe 碰到懂的人,写个程序挂机投,网速好不限制访问的话5秒一个应该不成问题。然后把程序多分给几个人挂。
gdtv
2015-05-09 20:04:46 +08:00
最靠谱的还是绑定微信,在微信里投票,一个微信号只能投一票
shootsoft
2015-05-09 20:18:17 +08:00
强烈建议这种业务用redis处理。

redis的key设置直接用 ip 就行,如果ip存在,就表示存在了。

如果要限制每个IP/每天只能投一次,就每天凌晨用crontab的job清理一次redis。如果要限制每个IP,没24小时只能投放一次,就给redis的key设置一个过期时间为24小时。
loveyu
2015-05-09 21:37:03 +08:00
有个问题就是部分地区IP很少,类似移动之类的,很多人直接投不了
em70
2015-05-09 21:39:43 +08:00
首先不能纯IP限制,还要加上cookie,然后cookie值和IP,时间一起存到数据库。每次投票,在数据库查找12小时内的cookie值和IP记录是否与提交的信息有重复的,任一个重复都返回错误。

如果非要在24点限制,就每次投票查找今天0点到现在时间内的IP或者cookie是否重复即可。

不用考虑清空数据库,留下原始数据,还能人工K掉恶意投票。
jarlyyn
2015-05-09 21:40:36 +08:00
记录一下每个人最后一次投票时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX