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

JavaScript setInterval新图像(在线用户计数器),javascript,counter,setinterval,onmousemove,Javascript,Counter,Setinterval,Onmousemove,好, 因此,我构建了一个与php服务器通信的JS 用户进入网站后,会添加一个24小时cookie和一个会话cookie,这两个cookie都有一个随机数生成的密钥。如果他们已经在站点上,例如会话cookie或24小时,则将使用相同的密钥 每15秒,他们在页面上,它ping一个新的图像url,将密钥发送到服务器。然后,服务器将该密钥与其IP地址记录在日志中,这样一来,组合可能是无止境的,并且可以输入同一IP上的多个用户 我监视他们的鼠标移动。如果他们在页面上不移动鼠标超过60秒,他们现在处于空闲状

好,

因此,我构建了一个与php服务器通信的JS

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

每15秒,他们在页面上,它ping一个新的图像url,将密钥发送到服务器。然后,服务器将该密钥与其IP地址记录在日志中,这样一来,组合可能是无止境的,并且可以输入同一IP上的多个用户

我监视他们的鼠标移动。如果他们在页面上不移动鼠标超过60秒,他们现在处于空闲状态,我不再发送Ping,数据库将删除空闲/不活动3分钟或未发送Ping的用户。给一些缓冲和宽恕的时间。不管怎样,这一切似乎都很有效

但我开始记录他们输入的时间和他们上次向服务器发送ping的时间。这些数字非常突出。网站上有大量的用户,时间太长,不可能是真实的。如果他们不移动鼠标,他们是空闲的,然而,2000多名用户在线,其中150人在网站上的时间超过20分钟,移动鼠标或至少是移动鼠标,这会扰乱平均持续时间

我说不出话来。我试图建立一个非常准确的在线计数器,平均持续时间,但怎么可能有人在网站上这么长,是什么导致他们继续发送ping到服务器。毫无意义。我看了一下用户代理,它是所有不同的浏览器,它们似乎不是已知的机器人,比如谷歌机器人。他们是无赖

这些用户将继续每隔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千名用户在线