Поскольку onunload ненадежен, я бы рассмотрел решение AJAX. Я вообще не специалист в этом, но мысль, которая приходит на ум, - это пинг в вашу стойку очень часто. Я бы не стал пинговать твой счетчик каждую секунду, так как это кажется чрезмерным.
Я бы разбил время на интересующие вас периоды, такие как <5 секунд, <30 секунд, <1 минута, <5 минут, 5+ минут. </p>
Тогда я бы написал кусок JavaScript примерно так:
window.onload = soCounter;
var iter=0;
var times=[0,5,30,60,300]; // Your duration choices
function doCounter() {
sendCountPing(times(iter));
iter++;
if(iter < times.length) {
setTimeout(doCounter, times[iter]*1000);
}
}
function sendCountPing(dur) {
if (window.XMLHttpRequest)
{ // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{ // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","count.php?q="+b,true);
xmlhttp.send();
}
Хитрость в том, что для каждой отправляемой count.php?q=30
вам нужно вычесть одно из числа count.php?q=5
. Это не обязательно должно быть программно, оно легко обрабатывается.
Для уточнения: если у вас было 3 посетителя, один потратил 3 секунды, один потратил 20 секунд, а другой потратил 30 минут, вы увидите следующие значения:
0: 3 // 3 people spent at least 0 seconds
5: 2 // 2 people spent at least 5 seconds
30: 1
60: 1
300: 1 // 1 person spent at least 5 minutes
Имеет смысл?