Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Присутствие юзера


Автор: R.M. 10.10.2005, 04:56
Всем здрасте.

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

Автор: -=Ustas=- 10.10.2005, 09:51
Наверное сессии устанавливать надо. Скачай готовые скрипты чата, и посмотри их реализацию.

Автор: R.M. 10.10.2005, 09:53
-=Ustas=-

Если сессии то если юзер просто закроет окно он так и будет висеть в списке.

Смотрел я другой чат но там это тоже плохо реализовано, посмотрю ещё smile

Автор: HalkaR 10.10.2005, 10:36
Во-первых. Какой у тебя алгоритм обновления данных в окне чата?

Автор: Bastet 10.10.2005, 11:19
Как-то рассказывал мне друг, как сделать учет пользователей, просматривающих форум... Только я так и не реализовала и подзабыла.
Смысл был такой: заводится в БД табличка, в которой хранятся идентификатор пользователя и время его последнего обращения к странице. Если с момента последнего обращения прошло установленное время, запись удаляется из таблицы. Список юзеров он-лайн выводится из этой таблички.
Не сталкивалась с чатами (даже не чатюсь), но там вроде страница постоянно перезагружается, поэтому пока пользователь не закрыл страницу, его запись будет регулярно обновляться в БД.

Вот как-то так... Если этот метод не годится, звиняйте...

Автор: R.M. 10.10.2005, 15:09
HalkaR
Цитата(HalkaR @ 10.10.2005, 11:36)
Во-первых. Какой у тебя алгоритм обновления данных в окне чата?

Обновляется фрейм каждые 5 секунд в этом фрейме текстовой файл в который и пишутся сообщения


Bastet
Чтото вроде того, но если человек сидит на сайте но не пишет никому и ждёт чегото (не делает вообще ничего, просто ждёт) то его (по твоему принципу) кинет с сайта или чтонить вроде того.

Слышал о чёмто вроде слежки за обновлением фрейма чата, но незнаю как это реализовать smile

Автор: Bastet 10.10.2005, 17:33
Куксикус, почему его кинет (что вообще значит "кинет"?) с сайта?
А если загружать во фрейм не текстовый файл, а php-скрипт (который будет выводить этот самый текстовый файл), и в нем проверять пользователей? Тогда данные о просматривающих форум будут включать и тех, кто просто сидит и тупо смотрит в открытое окошко (скрипт-то все равно перезагружается каждые 5 секунд).
Боюсь только, это будет нагрузка на БД - каждые 5 секунд обрабатывать N не самых простых запросов.
Ничего другого на ум не идет.

Автор: R.M. 10.10.2005, 17:42
Bastet
Цитата(Bastet @ 10.10.2005, 18:33)
почему его кинет (что вообще значит "кинет"?) с сайта?

Ну кинет (если сделать при бездействии юзера переадресацию) или сессия уничтожется - особой разницы нету, всёравно доставит неудобства.

Цитата(Bastet @ 10.10.2005, 18:33)
А если загружать во фрейм не текстовый файл, а php-скрипт (который будет выводить этот самый текстовый файл), и в нем проверять пользователей? Тогда данные о просматривающих форум будут включать и тех, кто просто сидит и тупо смотрит в открытое окошко (скрипт-то все равно перезагружается каждые 5 секунд).
Боюсь только, это будет нагрузка на БД - каждые 5 секунд обрабатывать N не самых простых запросов.
Ничего другого на ум не идет.

Ну впринципе попробывать можно, только вот мне на ум не приходит КАК это сделать, я же собственно и спрашивал
Цитата
Есть чат, как определить находится ли юзер на странице?

Автор: HalkaR 10.10.2005, 19:48
Цитата
Ну впринципе попробывать можно, только вот мне на ум не приходит КАК это сделать, я же собственно и спрашивал
Цитата
Есть чат, как определить находится ли юзер на странице?

Код

<?
file('text.txt');

mysql_connect(...);
mysql_query("UPDATE"....); // юзер еще здесь
?>

Автор: Bastet 10.10.2005, 21:18
Куксикус, вот КАК определить присутствие юзера я описала в первом посте. Состоит оно из двух нехитрых процедурок (удаление из БД всех "просроченных" и обновление записи для запросившего страницу пользователя) в скрипте, который будет загружаться во фрейм.

Автор: R.M. 11.10.2005, 07:55
HalkaR
Это немного не то

Bastet
Вот твой первый пост
Цитата(Bastet @ 10.10.2005, 12:19)
Если с момента последнего обращения прошло установленное время, запись удаляется из таблицы. Список юзеров он-лайн выводится из этой таблички.

Но если запись будет удаляца то ево небудит в онлайн а он может сидеть но в чате не писать.
Или я чегото непонимаю?

Автор: Bastet 11.10.2005, 09:55
Куксикус, тебе нужно объединить мои первый и второй пост.
Если юзер даже просто сидит в чате и ничегошеньки не делает, скрипт во фрейме, перезагружаясь каждые 5 секунд, фиксирует его пребывание в базе данных. Даже не знаю, как объяснить... Короче во первых строках скрипта должно выполняться:

Шаг первый: удалить из БД записи всех пользователей, которые не запрашивали страницу в течении 15 секунд (это значит, что пользователь ЗАКРЫЛ окно браузера).
Шаг второй: найти (если не найдено - добавить) запись пользователя, который вызвал этот скрипт и обновить его время.

Обязательное условие: этот скрипт должен загружаться во фрейме. Тогда данные на каждого пользователя будут обновляться каждые 5 секунд вне зависимости от того, пишет он что-то или нет.
Не знаю, как еще объяснять... Если я ступила, надеюсь, кто-нибудь более знающий меня поправит.


Теоретически это должно работать. Если выкрою время, проверю.

Автор: R.M. 11.10.2005, 11:29
Bastet

Цитата(Bastet @ 11.10.2005, 10:55)
Теоретически это должно работать. Если выкрою время, проверю.

Ненадо я уже сам пошёл проверять smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)