Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Аналитика посещения сайта на JS (https://javascript.ru/forum/misc/4670-analitika-poseshheniya-sajjta-na-js.html)

onejsquestion 12.08.2009 15:13

Аналитика посещения сайта на JS
 
Уважаемые знатоки JavaScript!
Есть задача: получить информацию о посетителе странички сайта (как это делает допустим счетчик liveInternet), а именно - как долго провел времени посетитель на этой странице с момента его захода, до закрытия сайта.
Буду Вам очень благодарен за пример ее решения!

Gvozd 12.08.2009 17:54

посылать с помощью AJAX-а(транспорт script) раз в 10 секунд запрос сообщающий, что пользователь все еще на сайте.
серверным скриптом сохранять и анализировать эту информацию

onejsquestion 12.08.2009 20:25

А если система планируется высоконагруженная? не посылает же скрипт liveinternet каждые 10 секунд запрос на сервер.

есть ли еще какие-нибудь решения?

haha 12.08.2009 21:45

тогда так:
при входе на страницу засечь время.
при выходе отправлять запрос с истекшим временем.

на сервере время будет складываться.

onejsquestion 12.08.2009 21:50

Цитата:

Сообщение от haha (Сообщение 26701)
тогда так:
при входе на страницу засечь время.
при выходе отправлять запрос с истекшим временем.

на сервере время будет складываться.

Спасибо!
А как засечь, что юзер покинул определенный сайт, а не страницу?:)

haha 12.08.2009 22:29

Цитата:

А как засечь, что юзер покинул определенный сайт, а не страницу?
Через сессию. НО...

Вариант довольно громоздкий, но пока в голове вертится только он.

Каждое новое открывание страницы засекает время и отправляет "я открылся", на что сервер создает отдельного смотрителя(watcher по-аглицки) и отвечает каким-нибудь идентификатором (watcher-ID) для новоиспеченного вотчера. Затем при закрытии страницы будет отправляться "я закрылся спустя <столько-то>, слышишь вотчер-ИДэ?". И соответствующий вотчер зафиксирует значение времени.

Таким образом на сервере будет целая гора вотчеров, у каждого из которых будет хранится свое собственное значение времени. Складывать итоговое время придется с учетом накладок вотчеров, ведь некоторые будут созданы, пока другие еще не зафиксированы, тут просто нужно запоминать время создания и фиксации вотчеров на сервере.

Ну и "покидание" сайта обязательно отразится на сессии. Так что в завершающей функции нужно проконтролировать вотчеры: "убить" незавершенные(будут ли?), правильно рассчитать, что-нибудь еще.

Вот, как бы, пример подсчёта. Детализировать его - Ваша задача.

P.S. :) Заинтересован в ознакомлении с рабочей версией.

Gvozd 12.08.2009 23:51

Цитата:

Сообщение от haha
при выходе отправлять запрос с истекшим временем.

как вы предполагаете отправлять запрос при закрытии страницы?
на это нельзя повесить событие
сессия при этом не закрывается! убивается куки сессии(при стандартных настройках PHP к примеру), но сама сессия еще достаточно долго может прожить(опять-таки зависит от настроек)

Kolyaj 13.08.2009 00:10

Цитата:

Сообщение от Gvozd
на это нельзя повесить событие

unload/beforeunload не работает только в опере и то при некоторых условиях вполне себе работает.

haha 13.08.2009 08:59

Цитата:

Сообщение от Gvozd (Сообщение 26715)
как вы предполагаете отправлять запрос при закрытии страницы?
на это нельзя повесить событие
сессия при этом не закрывается! убивается куки сессии(при стандартных настройках PHP к примеру), но сама сессия еще достаточно долго может прожить(опять-таки зависит от настроек)

При закрытии страницы на клиенте приходят фиксаторы вотчеров. Если сессия и продолжит жить, то вотчеры - нет. Незафиксированные вотчеры, для которых не придет запроса с неадекватно закрытых страниц, отсеятся или будут вычисляться особенным методом, получится погрешность в статистике.
И вот метод вычисления на сервере будет направлен на уменьшение погрешности, а не js. Для js важно только отправлять все вовремя. ( load unload )

x-yuri 14.08.2009 08:42

во-первых, есть еще нюанс, что пользователь может находиться на странице дольше, чем продолжительность сессии (т.е. все-таки ajax-запросы нужно посылать изредка). Можно посылать запросы "раз в сессию", если не пришел запрос - сессия была неадекватно закрыта

во-вторых, то, что пользователь не закрыл страницу не значит, что он ее просматривает


Часовой пояс GMT +3, время: 05:19.