| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Присутствие юзера |
| Автор: R.M. 10.10.2005, 04:56 |
| Всем здрасте. Есть чат, как определить находится ли юзер на странице? Т.е. надо чтобы при уходе юзера из чата он пропадал в списке юзерова. Как такое осуществить? Проверять время последней отправки сообщения не катит, т.к. юзер может сидеть но в чате не писать (чат - не единственное что есть на странице) |
| Автор: -=Ustas=- 10.10.2005, 09:51 |
| Наверное сессии устанавливать надо. Скачай готовые скрипты чата, и посмотри их реализацию. |
| Автор: R.M. 10.10.2005, 09:53 |
| -=Ustas=- Если сессии то если юзер просто закроет окно он так и будет висеть в списке. Смотрел я другой чат но там это тоже плохо реализовано, посмотрю ещё |
| Автор: HalkaR 10.10.2005, 10:36 |
| Во-первых. Какой у тебя алгоритм обновления данных в окне чата? |
| Автор: Bastet 10.10.2005, 11:19 |
| Как-то рассказывал мне друг, как сделать учет пользователей, просматривающих форум... Только я так и не реализовала и подзабыла. Смысл был такой: заводится в БД табличка, в которой хранятся идентификатор пользователя и время его последнего обращения к странице. Если с момента последнего обращения прошло установленное время, запись удаляется из таблицы. Список юзеров он-лайн выводится из этой таблички. Не сталкивалась с чатами (даже не чатюсь), но там вроде страница постоянно перезагружается, поэтому пока пользователь не закрыл страницу, его запись будет регулярно обновляться в БД. Вот как-то так... Если этот метод не годится, звиняйте... |
| Автор: R.M. 10.10.2005, 15:09 | ||
HalkaR
Обновляется фрейм каждые 5 секунд в этом фрейме текстовой файл в который и пишутся сообщения Bastet Чтото вроде того, но если человек сидит на сайте но не пишет никому и ждёт чегото (не делает вообще ничего, просто ждёт) то его (по твоему принципу) кинет с сайта или чтонить вроде того. Слышал о чёмто вроде слежки за обновлением фрейма чата, но незнаю как это реализовать |
| Автор: Bastet 10.10.2005, 17:33 |
| Куксикус, почему его кинет (что вообще значит "кинет"?) с сайта? А если загружать во фрейм не текстовый файл, а php-скрипт (который будет выводить этот самый текстовый файл), и в нем проверять пользователей? Тогда данные о просматривающих форум будут включать и тех, кто просто сидит и тупо смотрит в открытое окошко (скрипт-то все равно перезагружается каждые 5 секунд). Боюсь только, это будет нагрузка на БД - каждые 5 секунд обрабатывать N не самых простых запросов. Ничего другого на ум не идет. |
| Автор: R.M. 10.10.2005, 17:42 | ||||||
Bastet
Ну кинет (если сделать при бездействии юзера переадресацию) или сессия уничтожется - особой разницы нету, всёравно доставит неудобства.
Ну впринципе попробывать можно, только вот мне на ум не приходит КАК это сделать, я же собственно и спрашивал
|
| Автор: HalkaR 10.10.2005, 19:48 | ||||||
|
| Автор: Bastet 10.10.2005, 21:18 |
| Куксикус, вот КАК определить присутствие юзера я описала в первом посте. Состоит оно из двух нехитрых процедурок (удаление из БД всех "просроченных" и обновление записи для запросившего страницу пользователя) в скрипте, который будет загружаться во фрейм. |
| Автор: R.M. 11.10.2005, 07:55 | ||
| HalkaR Это немного не то Bastet Вот твой первый пост
Но если запись будет удаляца то ево небудит в онлайн а он может сидеть но в чате не писать. Или я чегото непонимаю? |
| Автор: Bastet 11.10.2005, 09:55 |
| Куксикус, тебе нужно объединить мои первый и второй пост. Если юзер даже просто сидит в чате и ничегошеньки не делает, скрипт во фрейме, перезагружаясь каждые 5 секунд, фиксирует его пребывание в базе данных. Даже не знаю, как объяснить... Короче во первых строках скрипта должно выполняться: Шаг первый: удалить из БД записи всех пользователей, которые не запрашивали страницу в течении 15 секунд (это значит, что пользователь ЗАКРЫЛ окно браузера). Шаг второй: найти (если не найдено - добавить) запись пользователя, который вызвал этот скрипт и обновить его время. Обязательное условие: этот скрипт должен загружаться во фрейме. Тогда данные на каждого пользователя будут обновляться каждые 5 секунд вне зависимости от того, пишет он что-то или нет. Не знаю, как еще объяснять... Если я ступила, надеюсь, кто-нибудь более знающий меня поправит. Теоретически это должно работать. Если выкрою время, проверю. |
| Автор: R.M. 11.10.2005, 11:29 | ||
Bastet
Ненадо я уже сам пошёл проверять |