好的,
所以我构建了一个与服务器(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千名在线用户。