Корректный уход с сайта
Здравствуйте!
Нужно сделать корректный уход с сайта. На странице есть ссылка "Выйти", когда юзер её нажимает, то запускается php-скрипт (закрывает сессии, делает запись в БД). Но юзер может и не нажать ссылку, а просто закрыть страницу или перейти на другой сайт. Использовал onbeforeunload и confirm(), но работает не правильно... Не могу понять что в коде написать, по-этому опишу словами. Юзер нажимает ссылку на внешний какой-нибудь сайт. запускается моя js-функция: if (confirm("Покинуть страницу?")) { запустить мой php-скрипт; осуществить переход по нажатой ссылке; } else { блокровать переадресацию по ссылке; // остаться на сайте и не переходить по ссылке } То есть нужно отловить событие ухода и потом написать обработчик. Видел много раз такое на разных сайтах. Подскажите пожалуйста, я вывел диалоговое окно, как написать обработчик для кнопок ??? |
<script> window.onunload= function() { alert("До свидания!"); }; </script> <a href="http://yandex.ru">Нажмите на ссылку, чтобы понять</a> |
Нужно что бы при уходе с сайта вывелось окно с двумя кнопками и в зависимости от выбора кнопки делать те или иные действия.
В примере выше просто выводится сообщение. Например, в том же "контакте" при нажатии на внешнюю ссылку появляется окно, где можно выбрать перейти по ссылке или остаться на странице. Вот что то подобное мне и надо. |
AndreyS,
Не тупи, trikadin показал на какое событие нужно вешать confirm. |
Сделал confirm.
При нажатии на какую-нибудь ссылку появляется окно, НО если я жму отмена то все равно происходит переход по ссылки, а нужно чтоб осталось на той же странице. То есть жму Ок или Отмена результат одинаковый - переход по нажатой ссылке. |
<script> window.onbeforeunload= function() { return "Вы точно хотите уйти?"; }; </script> <a href="http://yandex.ru">Нажмите на ссылку, чтобы понять</a> |
О спасибо большое!!!
А можно, например, если нажать кнопку "Уйти" со страницы" выполнить еще один скрипт мой, а потом сделать переход по ссылке? |
Цитата:
|
Подскажите пожалуйста это вообще возможно, запустить свой скрипт по нажатию кнопки в данном окне.
Весь интернет облазил ничего не нашел. Только вставляю условие сразу перестает работать. Как обработать нажатие кнопок??? |
document.onkeydown=function() {alert("Вы нажали кнопку!")}; А, тут не сработает. |
Так это нажатие клавиатуры...
Появляется окно с вопросом "Покинуть страницу?", если юзер жмет "Покинуть", при закрытии страницы выполнить скрипт. Нужно поймать кнопку "Покинуть", и написать ей обработчик. Вот как к именно этой кнопке обратиться? |
AndreyS,
Зачем насиловать пользователей, представь что при нажатии пульта телевизора он начнет тебя спрашивать уверен ли ты или реклама поинтересуется в себе ли ты? |
Дело в том что это интернет чат.
Когда человек заходит в чат, в БД ставится флаг что он online. В главном окне есть список "Пользователи online". Проблема в том что человек может просто закрыть страницу или перейти на другой сайт. Как это отловить и убрать его из online??? Подскажите пожалуйста может есть какой-нибудь другой способ это сделать!! А то я уже не знаю что делать... |
Например: каждые n секунд браузер посылает на сервер сообщение. Типа "Я онлайн!". Если в течении n секунд на сервер сообщение не приходит - то делаешь пользователя оффлайн.
P. S. Не уверен, что это лучший способ) |
А можно пожалуйста по подробнее.
Как браузер посылает это сообщение? Хотя бы на словах, а то не совсем понял как это должно происходить. |
|
Цитата:
К примеру, запрашиваем у сервера картинку с помощью img, а на самом деле кидаем ему запрос, а он ответом генерит прозрачную картинку и по её высоте мы определяем, что он нам сказал :D |
У меня есть небольшая часть c Ajax.
Не понятна сама идея. Как браузер может знать Online или нет. Сейчас значение "online" у меня хранится в БД. Мой блок обновляется каждые 5 сек. и шлет запрос к БД. А как браузер может сам определять это не понятно. |
Ну самый простой вариант - это polling: раз скажем в 5 минут посылаешь запрос серву, мол "привет, я всё ещё онлайн". Если делать понтовей, то можно сделать сокет.
|
Цитата:
setInterval(function(){alert("Ты тут!")}, 5000); Цитата:
|
А если пользователь не ушел, а просто открыл еще одну вкладку и параллельно на другом сайте сидит.
Корректно будет работать? |
Да
|
Цитата:
|
Я так понял что бы что то передать на сервер нужно через Ajax?
|
Да.
|
Написал Ajax-запрос.
Теперь каждые 5 сек. отправляется на сервер переменная "On=1". А на сервере как сделать? Фиксировать время когда поступает переменная и сравнивать или можно как-то проще? |
Цитата:
|
Цитата:
|
Не подумал...) людей все равно пока нет, потом увеличу, просто тестирую ждать не хочется пока скрипт отработает.
Так, а что на сервере делать, тоже по таймеру? |
Цитата:
Да и я писал выше, что понтовей сделать на сокете (например через flash), тогда задержек не будет) На сервере можно отдельный процесс создать, а вообще я не силён в данном вопросе, там кто заморачивается с Node.JS/phpDaemon/Twisted и т.д. могут более конкретно сказать |
Не обязательно по таймеру. В момент, когда нужно знать, онлайн пользователь или оффлайн - просто берёте время последнего оповещения об онлайновости и сравниваете его с текущим. Если больше, скажем, 7 секунд - чувак оффлайн. 2 секунды на издержки)
А, чёрт, я понял о чём говорил kobezzza! Туплю, да. Короче, суть в том, что если есть злоумышленник, хоть чуток разбирающийся в web-технологиях, он может поставить время на таймер на 0 мс, и тогда ваш сервер может упасть. Особенно если окон открыть несколько. UPD: А, то есть kobezzza говорил всё-таки не об этом... |
Кстати да... Смотрите в сторону NodeJS. Тут mycoding делал где-то...
|
Цитата:
Цитата:
http://habrahabr.ru/blogs/php/79377/ |
Но с другой стороны, если мы тут сейчас ещё и на ошибки безопасности начнём заморачиваться, то мы тут зазимуем)
|
С серверной частью все понял, спасибо.
А как с Ajax быть, я только сейчас подумал о перегрузке у меня еще два окна параллельно обновляются. Как не допустить подмены числа. Может на сервере как то проверять эти числа? |
Цитата:
|
секунды. Чтоб 0 сек. не смогли поставить
Я уже что то запутался... |
AndreyS обрати внимание на ссылку, что я скинул, там люди как раз сделали чат в связке с phpDaemon и исходники там есть
Цитата:
|
Посмотрел.
Кто то пользовался этим, сложно или нет? Недавно начал php фреймворками не пользовался еще, пока хватало. Получается переделывать все придется( |
Пример чата из статья поклацал не понял как он работает, там только цифры внизу меняются и все
|
Часовой пояс GMT +3, время: 04:24. |