JavaScript setInterval新图像(在线用户计数器)

时间:2014-05-04 14:23:36

标签: javascript counter setinterval onmousemove

好的,

所以我构建了一个与服务器(php)通信的JS。

一个用户进入网站,它会添加一个24小时的cookie和一个会话cookie(两者都有一个随机数生成的“密钥”。如果他们已经在网站上,例如会话cookie或24小时,将使用相同的密钥。

他们在页面上每隔15秒就会点击一个“新图像()”网址,将“密钥”发送到服务器。然后服务器使用他们的IP地址记录该密钥,这样组合可以是无限的,并且可以输入同一IP上的多个用户。

我监控他们的鼠标动作。 (如果他们没有在页面上移动鼠标超过60秒,它们现在处于空闲状态而我不再发送Ping),数据库将删除已空闲/不活动3分钟或尚未发送ping的用户。 (给出一些缓冲和宽恕时间)。无论如何,所有这些似乎都很有效。

但是我开始记录他们输入的时间以及他们最后一次向服务器发送ping。数字非常出色。网站上有大量用户太长时间无法实现。如果他们不移动鼠标,他们就会闲置,但是,有2000多名在线用户,其中150人已经在网站上停留超过20分钟并移动鼠标(或者他们正在移动鼠标的至少污垢javascript),以及它的混乱平均持续时间。

我迷失了语言。我正在尝试构建一个具有平均持续时间的非常准确的在线计数器,但是如何有人在网站上这么长,是什么导致他们继续向服务器发送ping。没有意义。我看过用户代理,它的所有不同浏览器,它们似乎不是已知的Bots,例如googlebot。他们是流氓。

这些用户将每隔15秒仍然主动向服务器发送ping一天,如果他们没有点击一个页面(那是30分钟),我最多限制为120 ping,但ping仍在继续,它很疯狂。

var onses = decodeURIComponent(_srread('__SE3'));
var oncook = decodeURIComponent(_srread('__ON3'));
if (onses == '') {
    var key = Math.floor((Math.random() * 99999999) + 1).toString();
    var bk = key;
}
else {
    var bk = onses;
}
sr_pinge(1);
var idleTime = 0;
var pingcap = 0;
var idleInterval = setInterval(sr_idletime, 1000);
function addEvent (evnt, elem, func) {
    if (elem.addEventListener) {
        elem.addEventListener(evnt, func, false);
    }
    else if (elem.attachEvent) {
        elem.attachEvent("on" + evnt, func);
    }
    else {
        elem[evnt] = func;
    }
}
addEvent('mousemove', document, sr_movements);
function sr_movements () {
    idleTime = 0;
}
function sr_idletime () {
    idleTime = idleTime + 1;
    if (idleTime > 60) {
        if (this.ping) {
            clearInterval(this.ping);
            this.ping = false;
        }
    }
    else {
        if (this.ping) {} else {
            sr_ping();
        }
    }
}
function sr_ping () {
    this.ping = setInterval(function () {
        sr_pinge(0);
    }, 15000);
}
function sr_pinge (pv) {
    pingcap = pingcap + 1;
    if (pingcap > 120) return false;
    returned = 0;
    if (pv == 1) {
        if (oncook == '') {
            var ontime = new Date(), onexpire = ontime.setTime(ontime.getTime() + 86400000);
            _srset('__ON3', encodeURIComponent(bk), ontime);
            _srset('__SE3', encodeURIComponent(bk));
        }
        else {
            if (onses == '') {
                returned = 1;
                _srset('__SE3', encodeURIComponent(bk));
            }
        }
    }
    var im = new Image();
    var img = 'http://'+Domain+'/o/?type=on&v='+Version+'&pv='+pv+'&r='+returned+'&k='+encodeURIComponent(bk);        img += ' & a = '+account_id+' & dn = '+en(docdomain)+' & dt = ' + new Date().getTime();
    im.src = img;
}

我不确定在哪里发布这个,但是我想确保我构建的代码在许多浏览器中运行良好,我的猜测可能是某些东西在某个地方无法正常运行,而且当人们不应该这样做时,人们会很活跃。但这意味着他们离开了网站,忘了它或什么的。但它占据了20%的流量。通常在给定时间有大约1-2千名在线用户。

0 个答案:

没有答案