Создание чата - ПОМОГИТЕ!!!
Всем Hello! Вот делаю чат и столкнулся с такой проблемкой: как узнать находится человек в онлайн'е или вообще закрыл страничку с чатом. Помогите люди добрые уже который день не могу ничего придумать, точнее мысли есть, но ничего не выходит.:confused:
Пардон, ошибся... Это же javascript, а он не знает, когда окно закрывается... Так что, отправить серванту ничего не удастся...
мысля №1: использовать файлы, например с именем чувака и скритп в этот файл при обновлении страницы будет записывать ну например "1", потом считывать это значение ну и наконец записывать "0", т.е. этого чувака в чате нет, то в файле будет 0 и его имя вычеркнется и списка.
мысля №3: то же самое тока с мускулом.
Может кто-нибудь знает ещё какой способ?
Ну да, ну да... А вопрос "как узнать?" так и остался нерешённым... А то - нашёл решение... Попал пальцем в...
Помог лучше лучше, подкинул бы хотя бы какую-нибудь ссылочку где про это узнать, посоветовал бы чего, да вообще много чего мог бы сделать. Это всё было во-первых, а во-вторых я имел в виду какой способ лучше - мускул и файлы, или может ещё как-то можно это сделать?
А чем тебе твои варианты не нравятся, например с мускулом? Да и вообще проверить человек еще на сайте или нет можно с помощью сессии.
Это не совсем то, в этом примере используется айпи-адрес, хотя можно и с его помощью, но опять же его надо приделать к имени чувака, который сидит в чате, а потом куда-то записать, а это всё очень медленно. Вот насчёт сессий можно подробнее.
Ещё раз - и тему закрою, как не соответствующую поставленному вопросу.
Ещё раз - и тему закрою, как не соответствующую поставленному вопросу.[/QUOTE]
Ну подскажи свой вариант как узнать что страница была закрыта. Без использования БД или файлов а? подкинь код.
Вот статьи о сессиях, на этом сайте: http://www.codenet.ru/cat/Languages/PHP/Cookies-and-Sessions/
Ты котлеты от мух отдели: одно дело сессии писать в файло или БД, другое - узнать, что делает юзерь с браузером (может он отвёрткой экран колупает - но это ты программно вряд-ли узнаешь).
Раскинув мозгами, предлагаю использовать событие onunload:
Делаем формочку:
[HTML]
<body onunload="document.forms.logout.submit(); alert('good buy!!!');">
<form action="<тут скриптик, который выкинет чатланина из БД, как отсутствующего>" method="GET" name="logout">
<input type="hidden" name="user" value="1">
<input type="submit">
</form>
<body>
[/HTML]
Alert нужен для задержки: сомневаюсь, что браузер что-либо отправит, если просто закроется с концами. Ну, а поле user - идентификатор юзеря.
А на другой стороне лови уже и делай соответствующие движения в БД.
Вот такой вариант придумался. Выдумаешь лучше - напиши.
на время сессии юзверю привязывается SID
как только он закроет окно браузера SID потрётся из кукиса
ну и проверять некоторым скриптом наличие в куках данного СИДа
Как можно "проверять некоторым скриптом наличие в куках данного СИДа"?
А всё остальное про сессии - притча во языцех...
1) юзерь заходит в чат
2) скрипт проверяет кто чичас в онлайн
3) отдаёт имена пользователей находящихся на данный момент в чате
например: берёт некоторые данные из БД
Страница будет обновляться либо при отсылке сообщений
либо по действию пользователя или скрипта(через некоторое время)
такой алгоритм работает у меня на работе
количество одновременно сидящих пользователей достигает 40
Так в чём проблема? Уже все рецепты дали. За то время, сколько эта тема обсасывается, уже можно чат написать и даже разрекламировать. Что - сил не хватает взяться? Тогда - нафига он тебе нужен?
ну если последняя сабжа адресована мне.
то мне чат не нужен, ибо он уже есть и неплохо работает,
и тему создал не я ...
ты бы мне лучше подсказал как с редиректами быть
ну если последняя сабжа адресована мне.
то мне чат не нужен, ибо он уже есть и неплохо работает,
и тему создал не я ...[/QUOTE]
Ну да. Ошибсо. Бывает.
Таки что там с редиректами? Есть такая темка? Если нет - создай.
да создал вот она
Пардон, ошибся... Это же javascript, а он не знает, когда окно закрывается... Так что, отправить серванту ничего не удастся...[/QUOTE]
Ну почему же? Ставим на страницу JS с бесконечным циклом. В цикле есть таймер, который каждые Х сек/мин посылает на сервер небольшой кусок данных (флаг), ну слово "ОК" к примеру или порядковый номер чатланина. Серверный скрипт принимает эти данные и видит, что пользовать тут. Если в течении некоторого времение такие флаги не приходят значит либо пользователь закрыл страницу либо же проблемы со связью. Пользователя считаем разлогиненым и удаляем при вылете в тайм-аут.
Эх... спасибо всем за советы, но вы бы мне пример привели как это с мускулом сделать, и вот про onUnload (с этой фигнёй получилось).
А вообще все эти чаты - зло (это ИМХО). Кому нужен чат - IRC канал. Трафа меньше, удобства больше.
З.Ы. кто был в спб чате - это же irc да?
Нет, на спб не IRC. IRC - это немного другое