今天看优酷正巧看到优酷牛人--我是传奇的网络投票,由于自己公司也经常做投票,
所以很好奇这些牛逼的大公司是怎么做网络投票的,特此分析一下优酷是怎么做网络投票。
正文:
优酷牛人--我是传奇的网络投票页面:http://c.youku.com/niuren
自己随便选择一个选手,会弹出一个播放的浮动层,上面的投票按钮,点击投票成功后,
再次投票,为提示你:你已经投过,请一个小时后在投票!-----看起来这个投票很正常,但是这些都是表面现象。
使用firebug我们可以发现,每次投票都会触发一个http请求,
我们可以把这个http的链接:
http://minisite.youku.com/pub2/i_am_legend/vote.php?id=XMjc1NzExMzE2&callback=c&i=0.19621988418141467
我的第一感觉这个是使用getjson方式做的投票,我们把这个放在浏览器里,刷新几次发现数据一直是增加的
,
,689票,这样就可以刷票??
带着好奇我打开页面发现这个选手的票数情况:
我擦,我第一感觉这个怎么跟我平时做的投票很类似啊,赶紧找列表页的ajax请求文件;
果然发现是:
http://minisite.youku.com/pub2/i_am_legend/getvote.php?page=1&callback=cc&count=8&i=0.42276474971249034
这是一个很典型的jquery里面的getjson方式返回的数据
(我使用的jquery框架,优酷不是使用jq框架,但是原来类似),我又找了一个这个请求的源码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
function
vTpListGet(pg, pz, t){
pg = (pg || 1);
pz = (pz || 8);
t = (t ||
false
);
cc =
function
(oList, total){
if
(oList.length > 0){
var
html =
""
;
for
(
var
i=0;i < oList.length;i++){
html +=
"<ul class=\"x\">\n"
;
html +=
" <li class=\"x_thumb\"><a href=\"javascript:;\" onclick=\"vTpSet('"
+oList[i].videoid+
"','"
+oList[i].title+
"');\" title=\""
+oList[i].title+
"\"><img src=\""
+oList[i].thumburl+
"\" alt=\""
+oList[i].title+
"\" /></a></li>\n"
;
html +=
" <li class=\"x_title\"><a href=\"javascript:;\" onclick=\"vTpSet('"
+oList[i].videoid+
"','"
+oList[i].title+
"');\" title=\""
+oList[i].title+
"\">"
+oList[i].title+
"</a></li>\n"
;
html +=
" <li class=\"x_data\">票数:<span class=\"num\">"
+oList[i].total+
"</span></li>\n"
;
html +=
" <li class=\"x_btn\"><span class=\"btn\" onclick=\"vTpSet('"
+oList[i].videoid+
"','"
+oList[i].title+
"');\"></span></li>\n"
;
html +=
"</ul>\n"
;
}
html +=
"<div class=\"clear\"></div>"
;
document.getElementById(
'videosTpList'
).innerHTML = html;
if
(t){
max_cnt = pz;
var
js_pager =
new
jsPager();
js_pager.init(total, pz, pg,
"vTpPager"
);
document.getElementById(
'videosTpPager'
).style.display =
""
;
document.getElementById(
'videosTpPager'
).innerHTML = js_pager.getHtml();
}
}
};
js_request(
"http://minisite.youku.com/pub2/i_am_legend/getvote.php?page="
+pg+
"&callback=cc&count="
+pz+
"&i="
+ Math.random());
}
|
再来看优酷关于限制频繁投票的方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function
vTp(vid){
c =
function
(num,vid){
alert(
"投票成功,目前票数为:"
+num+
"票!"
);
var
exp =
new
Date ();
exp.setTime(exp.getTime() + 3600000);
setCookie(
"nrtp"
,
"true"
, exp);
}
if
(getCookie(
"nrtp"
) !=
"true"
){
js_request(
"http://minisite.youku.com/pub2/i_am_legend/vote.php?id="
+vid+
"&callback=c&i="
+ Math.random());
}
else
{
alert(
"一小时内只能投票一次!"
);
return
false
;
}
}
|
竟然是在客户端写cookies来判断,不禁有点坑爹了,之前我们做网络投票经常被刷票
,但是毕竟我们在使用服务端验证,记录一下ip来限制,但是优酷这个投票完全是靠客户端验证来实现。
总结一下优酷的投票:
- 列表页的数据是实时显示的,也就是说投票后立刻显示----我们当年投票也是实时显示,但是服务器压力太大,越到刷票的,数据库被频繁的插入读取,对数据压力也是蛮大的,经常把数据库服务器宕机了,后来采用缓存机制也解决这个问题,一分钟后显示数据。
- 这个投票的api文件写的有问题,我把http://minisite.youku.com/pub2/i_am_legend/vote.php?id=XMjc1NzExMzE2&callback=c&i=0.19621988418141467放在浏览器,不停的刷新居然可以不停的增加票数,很显然优酷的程序员偷懒了,起码也要判断一些提交页面的路径啊,提交方式啊
的什么,判断我是否来自正常的投票请求,如果这样的话这个投票也太容易刷票了,直接把这个url放在浏览器不同的F5就可以了,实在不行直接写个js定时刷新页面也可以。
- 防止刷票机制,决然是使用客户端cookie做验证,这个就有点菜鸟了,最普通的方式也是根据ip做验证(虽然这个方式在专业刷票公司哪里也是小儿科,但是应付非专业人士还是足够了),防止频繁刷票。
总结;
有点失望了,本以为大公司的技术都比我们成熟,看来有点高估了吧,看来不要盲目的迷恋和崇拜大公司,做好自己,相信自己的才是关键!
分享到:
相关推荐
小程序不做游戏?看看腾讯自己是怎么操作的
分数要多了点。。。因为缺分。。。但对于新手或者是有一定基础的学习者,相信是会有很大进步的。 搭项目之前,请一定要看readme.txt哦
小程序不做游戏?看看腾讯自己是怎么操作的.pdf
该系统用数据库sql2005和vs2005做的投票管理系统 请大家参考查阅 是我们学校的阮群生老师做的 感觉不错 再此表示感谢
网络头片系统 页面有很多,想知道就下载下去看看。保证好用。
常做噩梦肾不好?看看梦境便知道
AJAX之投票系统,无刷新调取其它页面数据 感兴趣的朋友可以看看
jsp做的投票程序,首先从数据库中取得公司名称到投票页面,然后用户投票显示结果
为什么在线看优酷不能全屏?.docx
贝玛教育网络部网络编辑培训教程网络编辑实务与编辑技巧 2016年6月 如何做一名新媒体内容编辑全文共27页,当前为第1页。 如何做一名网络编辑? 玩着做?OR 做着玩? 你喜欢网络吗? 最喜欢上哪些网站? 你每天多长时间...
我以前写的一个投票系统 采用VS2005 SQLEXPRESS2005 也不能算做系统了,呵呵 就是那种一般的投票 只做了功能,界面没有任何的美化 非常的简单 也非常适合入门 SQL数据库在App_Data下面 是sql格式的 用的时候...
虚实之争,都是屁股决定脑袋 该怎么做?看华为.pdf虚实之争,都是屁股决定脑袋 该怎么做?看华为.pdf
你的新媒体够新吗 看看“她生活”怎么做?.docx
看看你适合做程序员不? 看看里面的题目,就可以知道你有做程序员的天赋
如果您看不懂操作说明,可以联系软件作者帮你分析,对于大部分无需填写验证码的投票网站,个人完全能应付。 如果投票网站比较复杂,需要填写验证码、信息资料才可以投票,可以联系软件作者增加相应的功能模块。 如果...
学习jsp期间做得系统,投票管理系统 可以看看
这个投票系统做的非常详细,你可以尽情的去看,一定值得,是jsp做的
优酷这款路由器x1相比于优酷路由器X2外观相近但硬件配置有差异,那么优酷路由器x1怎样?值不值买吗?下面就详情来看看优酷路由器X1和X2对比拆解测评,大家参考下
这是一个奥运申办国投票系统,主要是用java做的,对巩固java第阶段很有帮助,希望大家拿去看一看