最近在做网站流量统计,碰到一个难题,如何计算网友在每个页面上的停留时间呢

解决方案 »

  1.   

    onload和onunload两个方法吧,
    onload记录开始时间,onunload记录结束时间,然后ajax写入库
      

  2.   

    onunload 可以写在js文件中调用吗
    因为我不是直接写在网页上的 类似于51.la这样的流量统计 可以在任何网站调用
      

  3.   


    严格意义上说,现在的页面停留时间统计都不是十分准确。拿google的analytics来说,计算页面停留的方法是:访问一个页面,写入Cookie此时刻、当页面。跳转时,即访问页改变时,记录此时刻,两者之差就是页面停留时间。大概意思就是这样。cnzz也是这个实现的。
    function cnzz_hf(str) {
        var b = 37851; var a = 63689; var h = 0; var i = 0;
        for (i = 0; i < str.length; i++) {
            var tp = h + (a * (str.charAt(i).charCodeAt())) >> 2; if (tp) { h = tp; a += b; } 
        }
        return h + '';
    }
    function gv_cnzz(of) {
        var es = document.cookie.indexOf(";", of);
        if (es == -1) es = document.cookie.length;
        return unescape(document.cookie.substring(of, es));
    }
    function gc_cnzz(n) {
        var arg = n + "=";
        var alen = arg.length;
        var clen = document.cookie.length;
        var i = 0;
        while (i < clen) {
            var j = i + alen;
            if (document.cookie.substring(i, j) == arg) return gv_cnzz(j);
            i = document.cookie.indexOf(" ", i) + 1;
            if (i == 0) break;
        }
        return -1;
    }
    var ed = new Date();
    var now = parseInt(ed.getTime());
    var data = '&r=' + escape(document.referrer.substr(0, 512)) + '&lg=' + escape(navigator.systemLanguage) + '&ntime=0.58106800 1250741268';
    var cnzz_a = gc_cnzz("cnzz_a1562522");
    if (cnzz_a != -1) cnzz_a = parseInt(cnzz_a) + 1;
    else cnzz_a = 0;
    var rt = parseInt(gc_cnzz("rtime"));
    var lt = parseInt(gc_cnzz("ltime"));
    var st = parseInt((now - lt) / 1000);
    var sin = gc_cnzz("sin1562522");
    if (sin == -1) sin = 'none';
    if (document.referrer.split('/')[2] != document.domain) sin = document.referrer;
    var h = cnzz_hf(document.location.href);
    var vw = gc_cnzz("vw1562522");
    var res = 0;
    if (vw != -1 && vw.length < 1024) { if (vw.indexOf(':' + h + ':') > -1) { res = 1; } else { vw += h + ':' } } else { vw = ':' + h + ':'; }
    var eid = gc_cnzz("cnzz_eid");
    if (eid == -1) eid = Math.floor(Math.random() * 100000000) + "-" + 1250741268 + "-" + document.referrer.substr(0, 64);
    if (lt < 1000000) { rt = 0; lt = 0; }
    if (rt < 1) rt = 0;
    if (((now - lt) > 500 * 86400) && (lt > 0)) rt++;
    data = data + '&repeatip=' + cnzz_a + '&rtime=' + rt + '&cnzz_eid=' + escape(eid) + '&showp=' + escape(screen.width + 'x' + screen.height) + '&st=' + st + '&sin=' + escape(sin.substr(0, 512)) + '&res=' + escape(res);
    document.write('<a href="http://www.cnzz.com/stat/website.php?web_id=1562522" target=_blank title="站长统计">站长统计</a>');
    document.write('<img src="stat.aspx?id=1562522' + data + '" border=0 width=0 height=0>');
    var et = (86400 - ed.getHours() * 3600 - ed.getMinutes() * 60 - ed.getSeconds());
    ed.setTime(now + 1000 * (et - ed.getTimezoneOffset() * 60));
    document.cookie = "cnzz_a1562522=" + cnzz_a + ";expires=" + ed.toGMTString() + "; path=/";
    document.cookie = "vw1562522=" + escape(vw) + ";expires=" + ed.toGMTString() + ";path=/";
    document.cookie = "sin1562522=" + escape(sin) + ";expires=" + ed.toGMTString() + ";path=/";
    ed.setTime(now + 1000 * 86400 * 182);
    document.cookie = "rtime=" + rt + ";expires=" + ed.toGMTString() + ";path=/";
    document.cookie = "ltime=" + now + ";expires=" + ed.toGMTString() + ";path=/";
    document.cookie = "cnzz_eid=" + escape(eid) + ";expires=" + ed.toGMTString() + ";path=/";这是cnzz跟踪代码的实现,希望有所帮助。google的太大了,就不贴了。老板让实现访问记录,页面停留时间因为太琐碎,没有加上。
      

  4.   

    http://topic.csdn.net/u/20091204/02/b7070000-405d-490a-8478-74fd14e0fd39.html
      

  5.   

    离开页面的时间onunload很多情况下都不会触发,比如多选项卡的浏览模式,还有电脑突然断点的情况下。希望有个完美的解决方案!
      

  6.   

    C#.net,Javascript,AJAX,SilverLight,HTML5,CSS3,WPF,WCF,Win Phone技术交流群118907238!