Запуск скрипта по событию закрытия браузера: это возможно?

Sardonix

Новичок
Запуск скрипта по событию закрытия браузера: это возможно?

...здавствуйте, господа программисты...
...имеется такая проблема: есть чат, при логе на нем создается переменная сессии и в таблицу базы данных пользователей добавляется флаг on-line активности залогинившегося пользователя - этот флаг используется для созания актуального списка активных пользователей чата: в список on-line пользователей считываются только юзернеймы пользователей, имеющих флаг...
...при разрегистрации запускается скарипт, который удаляет переменную сессии и флаг из таблицы базы...
...всё вот это работает нормально до тех пор, пока пользователь выходит из чата корректно - через скрипт разрегистрации, однако, если пользователь просто закрывает браузер, происходит следующее - переменная сесии гибнет, а флаг активности в таблице базы - нет,т.о., получается, что пользователя в чате нет, а вот другие пользователи его там видят...
...я подумал, что следует на JavaScript'е следует написать сценарий обработки события закрытия окна браузера, вызывающий РНР-скрипт разрегистрации - что-то типа обработки onClose для объекта window (в Delphi это реализовано, в СРР, насколько мне известно, тоже), но, полистав литературу, такого события для JS не нашел...
...просветите неуча - что делать?
 

sage

Новичок
Убивай таких пользователей по истечении некоторого промежутка времени. Если от человека не поступило за последние, например, 30 минут ни одного сообщения, считай, что этого человека уже нет в чате и он вышел просто закрыв браузер.
 

Sardonix

Новичок
Автор оригинала: sage
Убивай таких пользователей по истечении некоторого промежутка времени. Если от человека не поступило за последние, например, 30 минут ни одного сообщения, считай, что этого человека уже нет в чате и он вышел просто закрыв браузер.
...подскажи, пжлст, как это сделать?
 

sage

Новичок
Где у тебя хранится список всех on-line посетителей?
 

Sardonix

Новичок
Автор оригинала: sage
Где у тебя хранится список всех on-line посетителей?
...отдельного списка нет - есть общий список всех зарегистрированных на сайте пользователей: это таблица, в которой меется столбец active_flag, в который добавляется единичка, если пользователь залогился в чате... ...скрипт делает выборку из базы пользователей, имеющих флаг, и передает эти данные в фрейм on-line пользователей...
 

sage

Новичок
Добавь в эту табличку ещё одно поле - last_post_datetime. В нём храни дату и время последнего отправленного сообщения. Затем, перед тем, как выполнить выборку из базы on-line пользователей, смотри, у каких пользователей разница NOW() - last_post_datetime >= 30 минут и меняй у найденных флаг с 1 на 0. А затем уже выбирай on-line пользователей.
 

Sardonix

Новичок
Автор оригинала: sage
Добавь в эту табличку ещё одно поле - last_post_datetime. В нём храни дату и время последнего отправленного сообщения. Затем, перед тем, как выполнить выборку из базы on-line пользователей, смотри, у каких пользователей разница NOW() - last_post_datetime >= 30 минут и меняй у найденных флаг с 1 на 0. А затем уже выбирай on-line пользователей.
...мысль твоя понятна...
...подскажи тогда вот ещё что - как корректно определить разницу во времени: время-то задано в формате ГГГГ.ММ.ДД??
...как перевести время к удобоваримому формату, чтобы с ним можно было работать как с числом??
 

sage

Новичок
См. функции для работы со временем. Как вариант,
... WHERE NOW() >= (last_post_datetime + INTERVAL 30 MINUTE)
 

Sardonix

Новичок
Автор оригинала: sage
См. функции для работы со временем. Как вариант,
... WHERE NOW() >= (last_post_datetime + INTERVAL 30 MINUTE)
...я посмотрел - буду использовать временную метку Unix и разницу определять в секундах...
...спасибо за помощь...

-~{}~ 18.11.05 12:09:

...тема закрыта...
 

kruglov

Новичок
только не last_post, а last_refresh

-~{}~ 18.11.05 10:07:

p.s. а вообще у JS есть onunload и onbeforeunload
 

Sardonix

Новичок
...kruglov, JS-событие onunload (событие перед загрузкой новой страницы или закрытием браузера) - я посмотрел - хорошо мне подходит (см. начало темы)...
...ты не дашь мне ссылочку на инфу, где описано, как из JS-скрипта запустить PHP-скрипт?
 

Sardonix

Новичок
Dio, извини, конечно, но Ajax - это что-то очень для меня мутное и сложное - ничего не понял...
...я, собственно, и в JS не крупный специалист - я к нему обращаюсь, когда нужно решить каую-то конкретную проблему - как теперь...
 

sage

Новичок
kruglov
во-первых, ни разу не встречал, чтобы человек сидел в чате минут 30 и просто читал... :) во-вторых, если использовать last_refresh, как ты отличишь, сидит ли человек и просто тупо читает или уже давным-давно закрыл браузер?

-~{}~ 18.11.05 17:54:

и что по-твоему обозначает last_refresh?
 

SiMM

Новичок
Ни разу не слышал про чат, где пользователь вынужден делать рефреш сам, ручками.
 

sage

Новичок
Sardonix
это не ф-ии, это что-то непонятное, придуманное kruglov'ым :)
 
Сверху