Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как узнать продолжительность просмотра сайта пользователем?

5.0K
21 июня 2004 года
qazwsx
16 / / 21.06.2004
Как узнать продолжительность просмотра сайта пользователем?
4
21 июня 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by qazwsx
Как узнать продолжительность просмотра сайта пользователем?



Точно никак. По хорошему ты не сможешь узнать когда пользователь закрыл окно броузера.

6.8K
21 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by qazwsx
Как узнать продолжительность просмотра сайта пользователем?



В тело загружаемой страницы включаешь скрипт засекающий время входа на машине пользователя.
В теге BODY определяешь обработчик события onbeforeunload (запускается при выгрузке страницы), в котором вычисляешь разницу во времени между входом и выходом, и отправляешь маленький скрытый запрос на сервер с этим временем и именем пользователя. В IE(с разрешённым JS) работать должно.

4
21 июня 2004 года
mike
3.7K / / 01.10.2002
Через два дня на такой сайт никто заходить не будет.
6.8K
21 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by mike
Через два дня на такой сайт никто заходить не будет.



Можно узнать почему? Просто для общего развития.

4
21 июня 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by bezier
Можно узнать почему? Просто для общего развития.



Потому что это действие не может остаться не замеченным. И если сайт пытается сделать что-то после того как я нажимаю на крестик, то на такой сайт, я больше не захожу.

И я уверен, что так делают многие.

Такой метод применим в корпортивных системах, где сайт будет использоваться независимо от того, нравится или нет.

6.8K
22 июня 2004 года
bezier
21 / / 26.05.2004
Никто не говорит о том чтобы скрыть сам факт запроса от пользователя (При желании можно вывести сообщение о нём огромными буквами :) ), просто это неудобно и некрасиво каждый раз при выходе спрашивать: "Не хотите ли послать на сервер сообщение о том сколько времени вы здесь сидели?". Кроме того JS имеет открытый код, и если кто-то сможет заметить этот служебный запрос, то думаю он без особого труда разберётся и в его содержимом. Это моё личное мнение.

Если же хочется сделать по "хорошему", то придётся при запросе к серверу сохранять время и отслеживать откуда сделан запрос. Если запрос пришёл со страницы нашего сайта, то увеличиваем некоторый счётчик времени для текущего пользователя на соответсвующее значение. Правда, узнать сколько времени пользователь уделил последней просмотренной странице по "хорошему" не получится.

:) Есть ещё один вариант. Напиши свой http сервер на сокетах (в принципе ничего особо сложного, я как-то имел подобный опыт). Там ты абсолютно точно можешь узнать необходимое время по времени соединения. Если проблема критична - то почему нет? :)
250
22 июня 2004 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by bezier

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



потому, что нет.
Написав свой веб сервер, тебе всеровно придется играть по правилам HTTP.

6.8K
23 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by Joker


потому, что нет.
Написав свой веб сервер, тебе всеровно придется играть по правилам HTTP.



Не понял при чем здесь HTTP, это всего лишь протокол передачи информации в интернете, не больше. При контроле за процессом обмена информацией на достаточно низком уровне (на уровне сокетов, например) мы всегда можем определить находится ли клиент на связи с нашим сервером или нет(это вопрос внутренней реализации сервера). А какие протоколы высокого уровня при этом используются (HTTP,FTP,SMTP) - абсолютно не важно, главное чтобы их понимал браузер клиента.

291
23 июня 2004 года
gufy
703 / / 08.01.2003
че то я не понимаю. вот я хагрузил страницу и сижу ее читаю полчаса. хочешь сказать, что мой клиент все время находится "на связи" с сервером?
6.8K
23 июня 2004 года
bezier
21 / / 26.05.2004
Цитата:
Originally posted by gufy
че то я не понимаю. вот я хагрузил страницу и сижу ее читаю полчаса. хочешь сказать, что мой клиент все время находится "на связи" с сервером?



Всё зависит от того как реализован(настроен) сервер с которого ты грузишь страницу. Он может порвать связь сразу после выдачи тебе ответа на запрос, может подождать немного в ожидании повторных запросов, а может проверять связь и держать её хоть вечно. Что касается клиента, то по крайней мере IE(по личному опыту) связь с сервером самостоятельно не рвёт если ты не переходишь к другой странице.

250
23 июня 2004 года
Joker
1.4K / / 20.02.2000
Хорошо давай по пунктом все разберем, чел в браузере набрал ip/index.php и пытается зайти (упростим ситуацию).
Что же происходит ?
- устанавливается tcp соединение на 80 порт, затем вступает в силу http, браузер шлет
GET /index.php HTTP/1.0
сервер передает фаил
конец файла ознаменован EOF.
Получив это клиент(IE), рвет конект,
как собственно и веб сервер.
-----------
можне пускать скрипт в невидимым фрейми и постить пробелы через n_е кол во времени, и тогда разрыв конекта произойдет только после закрытия браузера..
// но нагрузка на хостер возрастет, кол - во процессов .. , прибить такого хостящегося :)
-----------

Цитата:
Originally posted by bezier

При контроле за процессом обмена информацией на достаточно низком уровне (на уровне сокетов, например) мы всегда можем определить находится ли клиент на связи с нашим сервером или нет(это вопрос внутренней реализации сервера).



что предлагаешь переписать ?

283
23 июня 2004 года
Alone
910 / / 20.11.2002
Цитата:
Originally posted by bezier
Что касается клиента, то по крайней мере IE(по личному опыту) связь с сервером самостоятельно не рвёт если ты не переходишь к другой странице.


LOL

P.S. сори за оверквотинг

6.8K
23 июня 2004 года
bezier
21 / / 26.05.2004
Ок. По пунктам так по пунктам. Тема была: как узнать продолжительность просмотра сайта пользователем. Предложение о посылке со стороны клиента скрытого запроса, после закрытия им браузера мы с негодованием отвергаем как идеалогически вредное. Тогда у нас остаётся только сервер. Я не знаю способа заставить Apache или MS IIS не рвать конект после ответа клиенту и обрабатывать обрыв конекта с клиентской стороны. Если кто знает - пусть скажет, и закроет эту тему.
Но уж если очень хочется, то вполне реально написать собственный http сервер с 0(на C++/Win32/WinSocket, например).
Этот сервер не будет рвать конект сразу после ответа пользователю, а будет ждать от него новых запросов(рвать можно по задержке - дело вкуса). И неправда что IE рвёт конект после любого HTTP ответа сервера (не знаю как файл, но с простой строкой с сформированной html, в качестве содержимого http ответа, проблем не было).
Пользовательский же обрыв обрабатывается элементарно.
250
23 июня 2004 года
Joker
1.4K / / 20.02.2000
думаю тему про веб сервер можно щитать закрытой. (если для кого то это не тривиально писать рабочий веб сервер, пусть пишут, выграш данного действия не вижу. только ради того чтобы он не рвал конект после EOF)

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

- можно попробывать поиграться с http1.1\ keep-alive, но там много времени не нацедишь.. (надо глянуть.)
4
24 июня 2004 года
mike
3.7K / / 01.10.2002
Давайте я расставлю точки :)

В спецификации HTTP сказано, что разрывом соединения можно управлять:

Connection: Close

или

Connection: Keep-Alive

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

Сервер наш и он будет делать все как надо.

О повидении клиента (броузера) мы ничего не знаем. Я знаю лишь одно - MSIE рвет соединение, но я не знаю через какое время, и не знаю чем это обусловлено (может это ограничение операционки).

Могу сказать, что 15 минут соединение точно провисит.

Второй вопрос - прокси сервера, файрволы и т.п. Вот они то обычно соединение держать не будут более 30 секунд.

Так что вот так вот !
6.8K
24 июня 2004 года
bezier
21 / / 26.05.2004
Ну ладно, ладно... :) Запинали ногами :) Просто попытался помочь найти выход. Лично мне ясно одно - технически задача решаема "по-хорошему", а в остальном согласен. Тема закрыта.
5.0K
24 июня 2004 года
qazwsx
16 / / 21.06.2004
Спасибо всем за полезную информацию. Я решил использовать событие onUnload на JS. Теперь меня интересует, можно ли обработать его где-нибудь между тегами <body></body>. Если да, то напишите код, пожалуйста. Кстати, у меня еще есть тема:"как узнать по IP-адресу город и страну". Знатоки, пишите.
7.5K
04 июля 2004 года
Aldekein
3 / / 04.07.2004
Господа! Что-то вы делаете из мухи слона! Уже и streaming технологии вспомнили и все
прочее... А до самого простого додуматься - нет. Очень близко, но не конкретно
предложил Joker - а ведь все так просто! Вспомним - по какому принципу работает
обычный чат? Такой красивый, со смайлами? =) В нем не извращаются всячески, потому
что если для 60 человек в онлайн каждому выдать по скрипту, который будет чего-то
пересылать через keep-alive да при этом еще и в базу данных поглядывать - сервер
это... "того" слегка, а потом и программера тоже "того" =) Но это все флуд... :roll:

А сам принцип - делаем маааленький фрейм или iframe на 0px, который каждые 10 секунд,
допустим, будет постить Session ID пользователя скрипту на сервере. Это будет поедать
может 6 Кб траффика в минуту - так ли это принципиально? А если неожиданно ID
перестает приходить скрипту - вывод? Пользователь ушел со страницы... :}
А ЕЩЕ! =) Никто не задумывался про то что есть люди, которые "любят" загрузить,
допустим, штук 10 страниц, отсоединиться от и-нета, а потом читать? Как ЭТО
обрабатывать? =) Давайте к каждому пользователю приставим по надзирателю, который
будет сидеть за спиной и писать в лог-файл у себя на лаптопе - когда и откуда
пользователь ушел? =) Хе-хе-хе..... =)
ХОЙ!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог