热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优酷的投票

正文:优酷牛人--我是传奇的网络投票页面:http:c.youku.comniuren自己随便选择一个选手,会弹出一个播放的浮动层,上面的投票按钮,点击投票成功后,再次投票,为提示你:你已经投过

正文:

优酷牛人--我是传奇的网络投票页面: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
        html += "
    \n";
        html +=
  • 票数:"+oList[i].total+"
  • \n";
            html +=
  • +oList[i].videoid+"','"+oList[i].title+"');\">
  • \n";
            html += "\n";
          }
          html += "
    "
    ;
          //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来限制,但是优酷这个投票完全是靠客户端验证来实现。

    总结一下优酷的投票:

      1. 列表页的数据是实时显示的,也就是说投票后立刻显示----我们当年投票也是实时显示,但是服务器压力太大,越到刷票的,数据库被频繁的插入读取,对数据压力也是蛮大的,经常把数据库服务器宕机了,后来采用缓存机制也解决这个问题,一分钟后显示数据。
      2. 这个投票的api文件写的有问题,我把http://minisite.youku.com/pub2/i_am_legend/vote.php?id=XMjc1NzExMzE2&callback=c&i=0.19621988418141467放在浏览器,不停的刷新居然可以不停的增加票数,很显然优酷的#偷懒了,起码也要判断一些提交页面的路径啊,提交方式啊 的什么,判断我是否来自正常的投票请求,如果这样的话这个投票也太容易刷票了,直接把这个url放在浏览器不同的F5就可以了,实在不行直接写个js定时刷新页面也可以。
      3. 防止刷票机制,决然是使用客户端COOKIE做验证,这个就有点菜鸟了,最普通的方式也是根据ip做验证(虽然这个方式在专业刷票公司哪里也是小儿科,但是应付非专业人士还是足够了),防止频繁刷票。

        总结;

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

      4. 本文链接: 看看优酷是怎么做网络投票的?
        联系作者: PHP淮北,交流QQ群:群1:153856687,群2:198110186
        版权所有: 非特殊声明均为本站原创文章,转载请注明出处:PHP10086博客网
        订阅更新: 欢迎通过RSS订阅我们的内容更新
    推荐阅读
    • 《精通 jQuery》第六章:深入解析与实战应用
      《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
    • Cookie学习小结
      Cookie学习小结 ... [详细]
    • 网站访问全流程解析
      本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
    • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
    • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
    • 为什么多数程序员难以成为架构师?
      探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
    • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
    • 网络爬虫的规范与限制
      本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
    • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
    • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
    • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
    • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
    • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
    • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
      设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
    • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
    author-avatar
    粉红的少女
    网络借贷平台http://www.kljie.com/
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有