Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   onbeforeunload - Обработка двух ситуаций (https://javascript.ru/forum/events/39157-onbeforeunload-obrabotka-dvukh-situacijj.html)

coll3ctor 18.06.2013 12:23

onbeforeunload - Обработка двух ситуаций
 
Всем доброго времени суток! Передо мною стоит задача узнать, онлайн пользователь или нет (я тут всё упростил, у меня на самом деле не пользователь и т.п.; в общем, главное суть).

В общем, я хочу при закрытии человеком вкладки или браузера, ловить этот момент и AJAX'ом посылать запросик на то, чтобы в БД установить одно из его полей для данного юзера is_online=0. Но, вот в чём проблема:
window.onbeforeunload = function (evt) 
{
            var message = "Вы уходите, а явсё знаю";
            if (typeof evt == "undefined") {
                evt = window.event;
            }
            if (evt) {
                evt.returnValue = message;
            }
            return message;
        }


Данный код, всего лишь оповестит пользователя об уходе и я не смогу узнать: правда ли он ушёл или же, всё же, решил остаться на странице. А мне надо бы, так же как и у функции confirm, чтобы обработать только случай ухода пользователя со страницы.

Надеюсь, мой вопрос понятен, жду помощи

danik.js 18.06.2013 15:30

Ты не успеешь отослать запрос при закрытии вкладки. Более того, такого события нет в Опере, поэтому на него пологаться особо не стоит. Особенно если учесть что браузер (или даже операционка) может крэшнуться или комп выдернуться из розетки (знаю людей, которые практикуют такой способ выключения PC: «А что? Ему ничего же не будет!»).
Стандартный метод - пинговать сервер аяксом каждые n секунд. Перестал юзер пинговать - значит отвалился, определяешь его как оффлайн.

bes 18.06.2013 20:01

вдобавок invalidate() его сессию и уже гарантированно отвалился :)


Часовой пояс GMT +3, время: 04:16.