The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как узнавать пользователь на странице или нет ?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 01-Май-04, 12:31  (MSK)
как написать скрипт, который бы показывал
кто сейчас находится на странице, и чтобы после закрытия.. если человек просто закрыл окно (как в чате, ирц) показывал что клиент отвалился ?

скрипт на PHP

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 01-Май-04, 17:18  (MSK)
>как написать скрипт, который бы показывал
>кто сейчас находится на странице, и чтобы после закрытия.. если человек просто
>закрыл окно (как в чате, ирц) показывал что клиент отвалился ?
>
>
>скрипт на PHP

При посещении страницы пользователем обновляй для него timestamp в файле.
Можно еще на страничке маленький фрейм сделать и перезагружать его раз в минуту.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "как узнавать пользователь на странице или нет ?"
Сообщение от rohan emailИскать по авторуВ закладки on 03-Май-04, 16:07  (MSK)
Стандарт html вообще не дает такой возможности стопроцентно.
Потому железного ответа просто нет.


Вариант с timestamp это не пользователей на странице, а пользователей... ну в час.

Вариант с фреймом... ну, тоже кривоват... Хотя вариант рабочий.

Можно отлавливать не закрытые сессии (keep connection alive) но опять же это не всегда работает. Не для всех браузеров и проксей.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 03-Май-04, 23:27  (MSK)
>Вариант с timestamp это не пользователей на странице, а пользователей... ну в
>час.

Это смотря как и сколько таймстемпов хранить.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "как узнавать пользователь на странице или нет ?"
Сообщение от Rohan emailИскать по авторуВ закладки on 04-Май-04, 13:47  (MSK)
>>Вариант с timestamp это не пользователей на странице, а пользователей... ну в
>>час.
>
>Это смотря как и сколько таймстемпов хранить.

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 05-Май-04, 00:13  (MSK)
Ok, если все так серьезно, то по порядку:
1. Считаем, что нам известны все юзеры поименно, имена уникальны в течении некоторого промежутка времени; иначе не имеет смысла исходная постановка задачи "показывал кто сейчас находится на странице". Просто человек вводит имя при входе на страничку или должен сначала зарегистрироваться и входить по паролю - не имет значения.
2. Когда от человека приходит запрос на нашу страничку, находим его имя любым доступным способом (из сессии или REMOTE_USER или еще как). Добавляем в файл юзеры_на_страничке.txt строчку вида "имя_юзера tab текущее время". Но перед этим проверяем, нет ли его еще в этом файле. Если есть - просто обновляем текущее время в записи.
3. Выбираем timeout нахождения на страничке, достаточно произвольно, из опыта. При запросе странички сканируем файл. Удаляем те записи, для которых превышен timeout. Всех остальных считаем присутствующими.
4. (опционально) Для более точного определения присутствия юзера на страничке заставляем его посылать запросы как можно чаще. Простейший способ - маленький фрейм с refresh-ем.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "как узнавать пользователь на странице или нет ?"
Сообщение от Michael emailИскать по авторуВ закладки(??) on 05-Май-04, 09:10  (MSK)
>3. Выбираем timeout нахождения на страничке, достаточно произвольно, из опыта. При запросе
>странички сканируем файл. Удаляем те записи, для которых превышен timeout. Всех
>остальных считаем присутствующими.
>4. (опционально) Для более точного определения присутствия юзера на страничке заставляем его
>посылать запросы как можно чаще. Простейший способ - маленький фрейм с
>refresh-ем.

а зачем такие извраты?
не проще ли использовать что-то типа <BODY onUnload="window.open(URL,name[,features])">
в качестве URL использвать скриптик, который меняет статус юзера на offline.

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 05-Май-04, 22:39  (MSK)
>а зачем такие извраты?
>не проще ли использовать что-то типа <BODY never="PrivoxyWindowOpen(URL,name[,features])">
>в качестве URL использвать скриптик, который меняет статус юзера на offline.

Ну вот хотя бы посмотри, что сделал мой прокси с твоим кодом :)
Это чтоб черезчур умные сайты меня при уходя остановить не пытались.
В общем, такая штука будет работать далеко не всегда.

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

Я бы предложил наоборот - таймаут как основной способ, прямое сообщение серверу (через onunload или просто кнопку logout) - как удобная фича.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "как узнавать пользователь на странице или нет ?"
Сообщение от Михаил emailИскать по авторуВ закладки(??) on 06-Май-04, 09:16  (MSK)
>Ну вот хотя бы посмотри, что сделал мой прокси с твоим кодом
>:)
посмотреть где?

>Это чтоб черезчур умные сайты меня при уходя остановить не пытались.
>В общем, такая штука будет работать далеко не всегда.
тогда это уже не прокси, а контент-фильтр какой-то...
вообще-то прокси не должен вмешиваться в содержимое передаваемых файлов...
по крайней мере, через сквид это работает.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 06-Май-04, 11:24  (MSK)
>>Ну вот хотя бы посмотри, что сделал мой прокси с твоим кодом
>>:)
>посмотреть где?

Вот твои слова, обработаныне моим прокси. Присмотрись:

>а зачем такие извраты?
>не проще ли использовать что-то типа <BODY never="PrivoxyWindowOpen(URL,name[,features])">
>в качестве URL использвать скриптик, который меняет статус юзера на offline.

>>Это чтоб черезчур умные сайты меня при уходя остановить не пытались.
>>В общем, такая штука будет работать далеко не всегда.
>тогда это уже не прокси, а контент-фильтр какой-то...

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

>вообще-то прокси не должен вмешиваться в содержимое передаваемых файлов...

Это где такое написано?

>по крайней мере, через сквид это работает.

Это может работать. Но не обязано.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 05-Май-04, 11:05  (MSK)
>Ok, если все так серьезно, то по порядку:
>1. Считаем, что нам известны все юзеры поименно, имена уникальны в течении
>некоторого промежутка времени; иначе не имеет смысла исходная постановка задачи "показывал
>кто сейчас находится на странице". Просто человек вводит имя при входе
>на страничку или должен сначала зарегистрироваться и входить по паролю -
>не имет значения.

           :^^да так... и есть... входяи по лог \ паролю и храняться в некоем файле с именем в мд5.пхп :) ну типа конфиг что ли юзвера...

>2. Когда от человека приходит запрос на нашу страничку, находим его имя
>любым доступным способом (из сессии или REMOTE_USER или еще как). Добавляем
>в файл юзеры_на_страничке.txt строчку вида "имя_юзера tab текущее время". Но перед
>этим проверяем, нет ли его еще в этом файле. Если есть
>- просто обновляем текущее время в записи.
   подожди... ну вот смотри.. он взял закрыл бравзер.. мой скрипт пришел поглядел время.. в файле на этого пользователя... а потом должен что ли с делать ВЕБ-пинг на него?... ну на известный нам например АйПи этого пользователя? или как мы его ловим ?
>3. Выбираем timeout нахождения на страничке, достаточно произвольно, из опыта. При запросе
>странички сканируем файл. Удаляем те записи, для которых превышен timeout. Всех
>остальных считаем присутствующими.
^^^подожди :)... а что есть таймаут ?

>4. (опционально) Для более точного определения присутствия юзера на страничке заставляем его
>посылать запросы как можно чаще. Простейший способ - маленький фрейм с
>refresh-ем.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 05-Май-04, 22:51  (MSK)
>   подожди... ну вот смотри.. он взял закрыл бравзер.. мой
>скрипт пришел поглядел время.. в файле на этого пользователя... а потом
>должен что ли с делать ВЕБ-пинг на него?... ну на известный
>нам например АйПи этого пользователя? или как мы его ловим ?

Не, не так. Пусть этот самый таймаут будет 5 минут.
12:00 На страничку заходит юзер Вася: обновляем его таймстемп в нашем файле. Показываем ему, что он тут пока один.
12:02 На страничку заходит юзер Петя: обновляем его таймстемп в нашем файле. Сканируем остальной файл и видим, что таймстемп Васи отличается от текущего времени меньши, чем на пять минут (наш таймаут). Показываем Пете, что Вася тут.
12:05 Вася обновляет страничку. Обновляем его таймстемп, сканируем файл, видим, что Петя еще тут. Сообщаем об этом Васе.
...
13:00 Вася обновляет страничку...
13:00 Петя обновляет страничку...
13:50 Петя обновляет страничку...
13:10 Петя обновляет страничку. Но от Васи нет вестей уже 10 минут, значит он ушел. Показываем Пете, что он тут один.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 06-Май-04, 11:45  (MSK)
>>   подожди... ну вот смотри.. он взял закрыл бравзер.. мой
>>скрипт пришел поглядел время.. в файле на этого пользователя... а потом
>>должен что ли с делать ВЕБ-пинг на него?... ну на известный
>>нам например АйПи этого пользователя? или как мы его ловим ?
>
>Не, не так. Пусть этот самый таймаут будет 5 минут.
>12:00 На страничку заходит юзер Вася: обновляем его таймстемп в нашем файле.
>Показываем ему, что он тут пока один.
>12:02 На страничку заходит юзер Петя: обновляем его таймстемп в нашем файле.
>Сканируем остальной файл и видим, что таймстемп Васи отличается от текущего
>времени меньши, чем на пять минут (наш таймаут). Показываем Пете, что
>Вася тут.
>12:05 Вася обновляет страничку. Обновляем его таймстемп, сканируем файл, видим, что Петя
>еще тут. Сообщаем об этом Васе.
>...
>13:00 Вася обновляет страничку...
>13:00 Петя обновляет страничку...
>13:50 Петя обновляет страничку...
>13:10 Петя обновляет страничку. Но от Васи нет вестей уже 10 минут,
>значит он ушел. Показываем Пете, что он тут один.


ребят, все супер, я понял что и как и откуда ноги растут, но я не понял ОДНОГО, что это за таймстамп, и что если человек .. просто сидит и не отвечает, ну там канал смотрит?... его что затыкнет  те которые ушли ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 06-Май-04, 11:48  (MSK)
ну вот вам яркий пример, каждый пользователь при входе получает место в файле и там храняцца его данные ?

<?
$username="BLackCat";
$password="";
$data="05/05/2004 : 21/37/09";
         ^^^^^ это и есть таймстамп ?

$adm="0";
?>


мы об этом говорим ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 06-Май-04, 16:30  (MSK)
>$data="05/05/2004 : 21/37/09";
>         ^^^^^ это и
>есть таймстамп ?

нет,
$data=now(); (или как там в пхп текещее время узнать)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "как узнавать пользователь на странице или нет ?"
Сообщение от dev emailИскать по авторуВ закладки(??) on 06-Май-04, 16:28  (MSK)
>ребят, все супер, я понял что и как и откуда ноги растут,
>но я не понял ОДНОГО, что это за таймстамп, и что

это текущее время сервера

>если человек .. просто сидит и не отвечает, ну там канал
>смотрит?... его что затыкнет  те которые ушли ?

ему не обязательно отвечать, достаточно запросить страничку заново (что бы посмотреть актуальную информацию)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 06-Май-04, 16:34  (MSK)
>>ребят, все супер, я понял что и как и откуда ноги растут,
>>но я не понял ОДНОГО, что это за таймстамп, и что
>
>это текущее время сервера
>
>>если человек .. просто сидит и не отвечает, ну там канал
>>смотрит?... его что затыкнет  те которые ушли ?
>
>ему не обязательно отвечать, достаточно запросить страничку заново (что бы посмотреть актуальную
>информацию)

ну если можно ...  глянуть... у меня вот тут все.я даж сорцы дам поглядеть :)))
friends.kiev.ua/chat-help/

  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "как узнавать пользователь на странице или нет ?"
Сообщение от Дмитрий Ю. Карпов emailИскать по авторуВ закладки on 09-Май-04, 22:16  (MSK)
Сначала бы неплохо выяснить, что значит "пользователь находится на страничке". Дело в том, что протоколо HTTP (а не HTML, как написАл rohan) работает в таком режиме: клиент открывает TCP-сессию, заказывает и получает страничку, после чего разрывает TCP-соединение, и более не общается с сервером до тех пор, пока не понадобится новая страничка. Плюс к тому надо научиться отличать одного клиента от другого (что с относительным успехом делают cookies).

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

Вместо (или вместе с) TimeOut можно использовать скрипт, который при закрытии окна или при переходе на др.страницу будет оповещать сервер. Можно сделать скрипт, который при загрузке страницы будет открывать TCP-сессию с сервером, а при закрытии страницы рвать её; если что-то случится, TCP-сессия сама порвётся по TimeOut.

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "как узнавать пользователь на странице или нет ?"
Сообщение от rohan emailИскать по авторуВ закладки on 09-Май-04, 22:55  (MSK)
>протоколо HTTP (а не HTML, как написАл rohan)
(признаю себя ослом - мимодумно. Разумеется я имел в виду HTTP)

>после чего разрывает TCP-соединение, и более не общается с сервером
Ага. Ну да. А Keep-Alive?

>что с относительным успехом делают cookies
Да вариантов много....

> Можно сделать скрипт, который при загрузке страницы будет открывать >TCP-сессию с сервером, а при закрытии страницы рвать её
А вот это уже совсем интересно...

Ну, помозговал маленько, вроде можно. В страницу встраиваем типа <img src=some_shit.pl width=1px height=1px>
Эта самая пэ-элька рисует mime заголовок и меееедленно начинает выдавать в эфир какой-то б-м большой jpeg. Скажем по байту в секунду.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "как узнавать пользователь на странице или нет ?"
Сообщение от nik emailИскать по авторуВ закладки(??) on 10-Май-04, 17:48  (MSK)
0. данный механизм используется мной на чате (обновления страницы пользователи делают принудительно)
1. делаем фрейм
2. загужаем в него файл ты_еще_тут.php?userid=код_пользователя
3. заставляем постоянно перегружать этот фай
   (<meta http-equiv="refresh" content="60">)
4. запрещаем кешировать его
   <meta http-equiv="Pragma" CONTENT="no-cash">)


5. регистрируем время 3-х событий - обновление ты_еще_тут.php?userid=код_пользователя/обновление страницы/отправка сообшения
я для хранения этих данных использую mysql - вариант с файлом тоже катит

6. анализ акопленных данных и вывод их пользователю
если файл ты_еще_тут.php?userid=код_пользователя не обновлялся более 60 сек (в нашем случае) + xx сек на разную там погрешность и задержки сети и тд то пользователь отвалился. иначе он на странице и мы знаем когда он последний раз считывал страничку и когда последний раз что-то писал.

>Можно сделать на странице регулярно обновляемый фрейм и отслеживать момент, когда
>он прекратил  загружаться (но если я обнаружу такой фокус, я
>больше на этот сайт не пойду и всем своим сотрудникам на
>Proxy закрою - у меня трафик небесплатный);
в моем случае ежеминутно передается 384 БАЙТА при цене трафика 15 центов за мег получаем 7 центов в СУТКИ или что то около 2-х рублей при непрерывное работа этого скрипта

так же следует учесть что у меня этот файл выводит информацию о кол-ве человек на сайте так что в идеале можно передавать 1 байт а скрипт на стороне клиента будет формировать вывод (отображать число пользователей)


>
>Вместо (или вместе с) TimeOut можно использовать скрипт, который при закрытии окна
>или при переходе на др.страницу будет оповещать сервер.
можно но _обязятельно_ "вместе" - иначе к примеру при разрыве модемного подключения  пользователь навечно останется на сайте

  Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "как узнавать пользователь на странице или нет ?"
Сообщение от Kravchenko emailИскать по авторуВ закладки(ok) on 11-Май-04, 11:17  (MSK)
>0. данный механизм используется мной на чате (обновления страницы пользователи делают принудительно)
>
>1. делаем фрейм
>2. загужаем в него файл ты_еще_тут.php?userid=код_пользователя
>3. заставляем постоянно перегружать этот фай
>   (<meta http-equiv="refresh" content="60">)
>4. запрещаем кешировать его
>   <meta http-equiv="Pragma" CONTENT="no-cash">)
>
>
>5. регистрируем время 3-х событий - обновление ты_еще_тут.php?userid=код_пользователя/обновление страницы/отправка сообшения
>я для хранения этих данных использую mysql - вариант с файлом тоже
>катит
>
>6. анализ акопленных данных и вывод их пользователю
>если файл ты_еще_тут.php?userid=код_пользователя не обновлялся более 60 сек (в нашем случае) +
>xx сек на разную там погрешность и задержки сети и тд
>то пользователь отвалился. иначе он на странице и мы знаем когда
>он последний раз считывал страничку и когда последний раз что-то писал.
>

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру