Принятый ответ - хорошо, но (в качестве альтернативы) я вложил некоторую работу в небольшую библиотеку JavaScript, которая показывает, сколько времени пользователь находится на веб-странице. Это дает дополнительное преимущество более точного (хотя и не совсем) отслеживания того, как долго пользователь фактически взаимодействует со страницей. Он игнорирует время, когда пользователь переключается на разные вкладки, бездействует, сворачивает браузер и т. Д. Метод Google Analytics, предложенный в принятом ответе, имеет недостаток (насколько я понимаю), что он проверяет только когда новый запрос обрабатывается домен. Он сравнивает время предыдущего запроса с новым временем запроса и называет это «временем, проведенным на вашей веб-странице». На самом деле он не знает, просматривает ли кто-то вашу страницу, свернул ли он браузер, переключил ли вкладки на 3 разных веб-страницы с момента последней загрузки вашей страницы и т. Д.
Редактировать: я обновил пример, чтобы включить текущее использование API.
Редактировать 2: Обновление домена, на котором размещен проект
https://github.com/jasonzissman/TimeMe.js/
Пример его использования:
Включить на вашу страницу:
<!-- Download library from https://github.com/jasonzissman/TimeMe.js/ -->
<script src="timeme.js"></script>
<script type="text/javascript">
TimeMe.initialize({
currentPageName: "home-page", // page name
idleTimeoutInSeconds: 15 // time before user considered idle
});
</script>
Если вы хотите сами сообщить время своему бэкэнду:
xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","ENTER_URL_HERE",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds();
xmlhttp.send(timeSpentOnPage);
TimeMe.js также поддерживает отправку данных о времени через веб-сокеты, поэтому вам не нужно пытаться принудительно ввести полный http-запрос в событие document.onbeforeunload
.