Как узнать продолжительность просмотра сайта пользователем?
Как узнать продолжительность просмотра сайта пользователем?
Точно никак. По хорошему ты не сможешь узнать когда пользователь закрыл окно броузера.
Как узнать продолжительность просмотра сайта пользователем?
В тело загружаемой страницы включаешь скрипт засекающий время входа на машине пользователя.
В теге BODY определяешь обработчик события onbeforeunload (запускается при выгрузке страницы), в котором вычисляешь разницу во времени между входом и выходом, и отправляешь маленький скрытый запрос на сервер с этим временем и именем пользователя. В IE(с разрешённым JS) работать должно.
Через два дня на такой сайт никто заходить не будет.
Можно узнать почему? Просто для общего развития.
Можно узнать почему? Просто для общего развития.
Потому что это действие не может остаться не замеченным. И если сайт пытается сделать что-то после того как я нажимаю на крестик, то на такой сайт, я больше не захожу.
И я уверен, что так делают многие.
Такой метод применим в корпортивных системах, где сайт будет использоваться независимо от того, нравится или нет.
Если же хочется сделать по "хорошему", то придётся при запросе к серверу сохранять время и отслеживать откуда сделан запрос. Если запрос пришёл со страницы нашего сайта, то увеличиваем некоторый счётчик времени для текущего пользователя на соответсвующее значение. Правда, узнать сколько времени пользователь уделил последней просмотренной странице по "хорошему" не получится.
:) Есть ещё один вариант. Напиши свой http сервер на сокетах (в принципе ничего особо сложного, я как-то имел подобный опыт). Там ты абсолютно точно можешь узнать необходимое время по времени соединения. Если проблема критична - то почему нет? :)
Есть ещё один вариант. Напиши свой http сервер на сокетах (в принципе ничего особо сложного, я как-то имел подобный опыт). Там ты абсолютно точно можешь узнать необходимое время по времени соединения. Если проблема критична - то почему нет? :)
потому, что нет.
Написав свой веб сервер, тебе всеровно придется играть по правилам HTTP.
потому, что нет.
Написав свой веб сервер, тебе всеровно придется играть по правилам HTTP.
Не понял при чем здесь HTTP, это всего лишь протокол передачи информации в интернете, не больше. При контроле за процессом обмена информацией на достаточно низком уровне (на уровне сокетов, например) мы всегда можем определить находится ли клиент на связи с нашим сервером или нет(это вопрос внутренней реализации сервера). А какие протоколы высокого уровня при этом используются (HTTP,FTP,SMTP) - абсолютно не важно, главное чтобы их понимал браузер клиента.
че то я не понимаю. вот я хагрузил страницу и сижу ее читаю полчаса. хочешь сказать, что мой клиент все время находится "на связи" с сервером?
Всё зависит от того как реализован(настроен) сервер с которого ты грузишь страницу. Он может порвать связь сразу после выдачи тебе ответа на запрос, может подождать немного в ожидании повторных запросов, а может проверять связь и держать её хоть вечно. Что касается клиента, то по крайней мере IE(по личному опыту) связь с сервером самостоятельно не рвёт если ты не переходишь к другой странице.
Что же происходит ?
- устанавливается tcp соединение на 80 порт, затем вступает в силу http, браузер шлет
GET /index.php HTTP/1.0
сервер передает фаил
конец файла ознаменован EOF.
Получив это клиент(IE), рвет конект,
как собственно и веб сервер.
-----------
можне пускать скрипт в невидимым фрейми и постить пробелы через n_е кол во времени, и тогда разрыв конекта произойдет только после закрытия браузера..
// но нагрузка на хостер возрастет, кол - во процессов .. , прибить такого хостящегося :)
-----------
При контроле за процессом обмена информацией на достаточно низком уровне (на уровне сокетов, например) мы всегда можем определить находится ли клиент на связи с нашим сервером или нет(это вопрос внутренней реализации сервера).
что предлагаешь переписать ?
Что касается клиента, то по крайней мере IE(по личному опыту) связь с сервером самостоятельно не рвёт если ты не переходишь к другой странице.
LOL
P.S. сори за оверквотинг
Но уж если очень хочется, то вполне реально написать собственный http сервер с 0(на C++/Win32/WinSocket, например).
Этот сервер не будет рвать конект сразу после ответа пользователю, а будет ждать от него новых запросов(рвать можно по задержке - дело вкуса). И неправда что IE рвёт конект после любого HTTP ответа сервера (не знаю как файл, но с простой строкой с сформированной html, в качестве содержимого http ответа, проблем не было).
Пользовательский же обрыв обрабатывается элементарно.
Удержать конект можно и так(писал об этом выше, повторюсь):
- создаем не видимый фрейм, в нем запускаем скрипт, который в мертвом цикле каждый 20( смотря сколько тайм аут на бездействия у веб сервера в настройках ) секунд, постит пробелы( или что то еще это не важно).
- можно попробывать поиграться с http1.1\ keep-alive, но там много времени не нацедишь.. (надо глянуть.)
В спецификации HTTP сказано, что разрывом соединения можно управлять:
Connection: Close
или
Connection: Keep-Alive
В настройках апача указывается, через сколько рвать соединение, если клиент ничего не делает.
Сервер наш и он будет делать все как надо.
О повидении клиента (броузера) мы ничего не знаем. Я знаю лишь одно - MSIE рвет соединение, но я не знаю через какое время, и не знаю чем это обусловлено (может это ограничение операционки).
Могу сказать, что 15 минут соединение точно провисит.
Второй вопрос - прокси сервера, файрволы и т.п. Вот они то обычно соединение держать не будут более 30 секунд.
Так что вот так вот !
прочее... А до самого простого додуматься - нет. Очень близко, но не конкретно
предложил Joker - а ведь все так просто! Вспомним - по какому принципу работает
обычный чат? Такой красивый, со смайлами? =) В нем не извращаются всячески, потому
что если для 60 человек в онлайн каждому выдать по скрипту, который будет чего-то
пересылать через keep-alive да при этом еще и в базу данных поглядывать - сервер
это... "того" слегка, а потом и программера тоже "того" =) Но это все флуд... :roll:
А сам принцип - делаем маааленький фрейм или iframe на 0px, который каждые 10 секунд,
допустим, будет постить Session ID пользователя скрипту на сервере. Это будет поедать
может 6 Кб траффика в минуту - так ли это принципиально? А если неожиданно ID
перестает приходить скрипту - вывод? Пользователь ушел со страницы... :}
А ЕЩЕ! =) Никто не задумывался про то что есть люди, которые "любят" загрузить,
допустим, штук 10 страниц, отсоединиться от и-нета, а потом читать? Как ЭТО
обрабатывать? =) Давайте к каждому пользователю приставим по надзирателю, который
будет сидеть за спиной и писать в лог-файл у себя на лаптопе - когда и откуда
пользователь ушел? =) Хе-хе-хе..... =)
ХОЙ!