`
lovecontry
  • 浏览: 1094918 次
文章分类
社区版块
存档分类
最新评论

看看优酷是怎么做网络投票的?

 
阅读更多

今天看优酷正巧看到优酷牛人--我是传奇的网络投票,由于自己公司也经常做投票,

所以很好奇这些牛逼的大公司是怎么做网络投票的,特此分析一下优酷是怎么做网络投票。

正文:

优酷牛人--我是传奇的网络投票页面:http://c.youku.com/niuren

自己随便选择一个选手,会弹出一个播放的浮动层,上面的投票按钮,点击投票成功后,

再次投票,为提示你:你已经投过,请一个小时后在投票!-----看起来这个投票很正常,但是这些都是表面现象。

image

使用firebug我们可以发现,每次投票都会触发一个http请求,

我们可以把这个http的链接:

http://minisite.youku.com/pub2/i_am_legend/vote.php?id=XMjc1NzExMzE2&callback=c&i=0.19621988418141467

我的第一感觉这个是使用getjson方式做的投票,我们把这个放在浏览器里,刷新几次发现数据一直是增加的

image ,689票,这样就可以刷票??

带着好奇我打开页面发现这个选手的票数情况:

image

我擦,我第一感觉这个怎么跟我平时做的投票很类似啊,赶紧找列表页的ajax请求文件;

果然发现是:

http://minisite.youku.com/pub2/i_am_legend/getvote.php?page=1&callback=cc&count=8&i=0.42276474971249034

image

这是一个很典型的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>" ;
       //alert(html);
       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做验证(虽然这个方式在专业刷票公司哪里也是小儿科,但是应付非专业人士还是足够了),防止频繁刷票。

总结;

有点失望了,本以为大公司的技术都比我们成熟,看来有点高估了吧,看来不要盲目的迷恋和崇拜大公司,做好自己,相信自己的才是关键!

 

5
9
分享到:
评论
5 楼 ielts0909 2012-05-02  
我也觉得这种东西只要控制好不能刷票就行了,其他的怎么减轻服务器压力怎么来,毕竟不是主要业务。
4 楼 shirne 2012-05-02  
也可能,这个投票并不重要,所以,只作个简单的限制作作样子。
因为不重要,没必要增加服务器压力。
3 楼 wmswu 2012-05-02  
放客户端验证是为了 减轻服务器端的鸭梨..............
2 楼 MyEyeOfJava 2012-05-02  
能够认真思考,并且写出这样的帖子是值得尊敬的。
1 楼 leonayx123 2012-05-02  
估计是 临时工做的。
呵呵 如果严密的话,必须在服务层再通过数据库查询验证一下是否重复数据,还要记录投票源的ip之类的信息。再做大还能做投票统计,区段统计。
什么功能都能做小也能做大,这种小东西,给实习的孩子一点练手的空间呢吧。

相关推荐

    java做的投票系统

    【Java做的投票系统】是一个基于Java技术栈的实用应用程序,主要使用了jsp、Struts2和Hibernate框架。这个系统的设计和实现旨在为用户提供一个在线投票的功能,用户可以创建投票、参与投票并查看投票结果。对于初学...

    吉鑫网络投票程序(文本)

    同时,它还支持设置不同的投票模板,使投票页面看起来更加专业和吸引人,满足不同场合和主题的需求。 在投票调查类应用中,吉鑫网络投票程序提供了以下几个核心知识点: 1. **投票设置**:程序的核心功能是设定...

    小程序不做游戏?看看腾讯自己是怎么操作的.pdf

    小程序不做游戏?看看腾讯自己是怎么操作的.pdf

    如何在QQ空间中发起投票?.docx

    综上所述,在QQ空间中发起投票是一个简单而又极具互动性的过程。通过合理的设置和有效的推广,你的投票不仅可以吸引到更多人的关注,还能为你的社交网络带来更多的交流与分享。在这个信息爆炸的时代,QQ空间投票作为...

    智睿网络投票评选管理系统 v10.8.8.rar

    "智睿网络投票评选管理系统 v10.8.8.rar" 是一款专为网络投票活动设计的管理系统,其版本号10.8.8表明这是一个经过多次迭代优化的产品,具有一定的稳定性和功能完善性。这款系统的核心功能可能包括投票创建、用户...

    不错的投票器

    在本投票器中,代理服务器的角色是作为中间人,隐藏真实的用户IP地址,使得每次投票请求看起来来自不同的网络位置,从而绕过IP限制。 代理服务器的配置文件通常包含一系列的IP地址和端口号,这些信息在"proxy.txt...

    网络投票软件 518tt投票软件 v20.1

    【518tt投票软件 v20.1】是一款专为网络投票活动设计的专业软件,其核心优势在于高效和易用性。这款软件能够帮助用户快速、有效地进行投票,节省了手动操作的时间和精力,尤其适合需要大量投票的场景,如网络竞赛、...

    入门级的投票系统源码.rar

    我以前写的一个投票系统 采用VS2005 SQLEXPRESS2005 也不能算做系统了,呵呵 就是那种一般的投票 只做了功能,界面没有任何的美化 非常的简单 也非常适合入门 SQL数据库在App_Data下面 是sql格式的 用的时候...

    投票功能前台页面代码+查看页页代码

    在IT行业中,投票功能是网站或应用程序中常见的一种交互元素,用于收集用户意见或进行调查。本项目包含的文件提供了一个简单的投票系统前端和后端的实现,主要涉及ASP(Active Server Pages)语言,这是一种微软开发...

    CC投票小程序源码(支持图文投票,简单方便、随时随地完成投票,可以方便设定投票模式(按天按全程,投票数限定))(代码前后端完整代码包投票列表,投票分类,投票动态,排行榜等).zip

    CC投票小程序源码(支持图文投票,简单方便、随时随地完成投票,可以方便设定投票模式(按天按全程,投票数限定))(代码前后端完整代码包投票列表,投票分类,投票动态,排行榜,生成投票海报,生成单个项目投票...

    虚实之争,都是屁股决定脑袋 该怎么做?看华为.pdf

    虚实之争,都是屁股决定脑袋 该怎么做?看华为.pdf虚实之争,都是屁股决定脑袋 该怎么做?看华为.pdf

    票盟投票软件 v9.0.rar

    6、票盟投票软件智能自动识别用户所使用的网络,比如ADSL宽带(也就是直接连猫(modem))再者就是使用路由器或者使用代理服务器连接网络。 7、票盟投票软件详细的投票记录,可以记录下当前投票IP,投票状态,投票...

    全自动投票

    如果您看不懂操作说明,可以联系软件作者帮你分析,对于大部分无需填写验证码的投票网站,个人完全能应付。 如果投票网站比较复杂,需要填写验证码、信息资料才可以投票,可以联系软件作者增加相应的功能模块。 如果...

    优酷X1路由器值得买?优酷路由器X1和X2对比拆解全面评测

    优酷这款路由器x1相比于优酷路由器X2外观相近但硬件配置有差异,那么优酷路由器x1怎样?值不值买吗?下面就详情来看看优酷路由器X1和X2对比拆解测评,大家参考下

    asp投票系统asp投票系统

    首先,我们来看用户界面。用户界面是投票系统与用户交互的窗口,通常包含投票选项、投票按钮以及可能的用户身份验证机制。ASP可以使用HTML、CSS和JavaScript来构建这个界面,其中HTML定义了页面结构,CSS负责样式...

    html5微信或移动端给用户投票(效果不错!!)

    4. `css` 文件夹:包含样式表文件,用于定义页面的样式和布局,使投票界面看起来美观且易于阅读。 总的来说,这个微信或移动端投票应用利用HTML5的先进功能和jQuery的便捷性,构建了一个用户友好、功能完善的投票...

    优酷全网电影采集

    优酷电影php看里边说明使用.

    从优酷安卓手机版的缓存视频提取并合并视频文件

    优酷安卓手机版缓存的视频是分段的,并且一个视频一个目录,目录的名字是一串可读性很差的数字和字母组合,专辑(比如连续剧)也是分开存的,本工具能将这些分段存储的视频,提出并合并,处理的结果按专辑,一集一集...

    wangzhang投票器

    "wangzhang投票器"是一款专门用于自动化投票的软件工具,主要应用于网络投票活动。它集成了自动投票和IP更换等功能,旨在帮助用户在各种在线投票活动中提高票数,例如评选比赛、网络调查等。这款工具的核心特点是其...

Global site tag (gtag.js) - Google Analytics