Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как отследить закрытие окна или вкладки браузера? (http://www.flasher.ru/forum/showthread.php?t=170171)

linnard 20.10.2011 00:31

Как отследить закрытие окна или вкладки браузера?
 
Существует ли событие в flash builder 4.5 которое перед закрытием окна или вкладки браузера вызывает окно подтверждения выхода из страницы? Например, когда приложение загружается, в базу данных записывается уникальный id пользователя. А когда пользователь закрывает браузер, id нужно удалить из базы.

GBee 20.10.2011 00:47

js по идее.
А ид удалять по умиранию сессии.

linnard 20.10.2011 00:54

Цитата:

Сообщение от GBee (Сообщение 1040475)
js по идее.
А ид удалять по умиранию сессии.

С добавлением все в порядке. А как тогда отследить умирание сессии?

Dimitry_II 20.10.2011 01:27

Слушатель сессий на сервере. Одно "но": обычно сессия устанавливается по дефолту на приличное время, в течении которого будет висеть. Если устроит, чтобы это было минут через 40, дерзай.

А так обычно используют событие onbeforeunload, которое сейчас поддерживается всеми браузерами. Но это все равно "костыли". В идеале структура проекта так должна строиться, чтобы слушать только сессию (тут тоже есть "нюансы" - повторный вход в проект с того же открытого браузера будет в той же сессии, что необходимо учитывать). И то - смысл? Нужно, чтобы что-то работало пока пользователь "на связи" - для этого есть сессия, в которой можно хранить параметры. Нет данного пользователя - нет сессии.

linnard 20.10.2011 01:41

Цитата:

Сообщение от Dimitry_II (Сообщение 1040482)
повторный вход в проект с того же открытого браузера будет в той же сессии, что необходимо учитывать

Тогда сессии не подходят...Насколько я понимаю onbeforeunload это javascript событие. Как мне его связать с flex приложением?

miki 20.10.2011 01:47

Поставь в приложении на таймер запрос скрипта. Этим скриптом пиши в базу время последнего конекта и если разница между "сейчас" и "тогда" больше N = юзер вышел.

trng 20.10.2011 01:54

Цитата:

Существует ли событие в flash builder 4.5...
flash player не имеет подобных событий. поэтому и в билдере их быть не может.
Более того, даже js вам ничего не гарантирует (на момент закрытия страницы у юзера может оборваться коннект, зависнуть браузер и т.п.).
Отслеживать умирание сессии тоже большого смысла нет, т.к. это самое умирание - не более чем некий "промежуток времени". Вот и используйте это - сохраняйте вместе с id метку времени (например, "от последнего обращения флеша к серверу"). И удаляйте из базы id с неактивностью больше суток или что то вроде этого.

linnard 20.10.2011 01:59

Цитата:

Сообщение от miki (Сообщение 1040487)
Поставь в приложении на таймер запрос скрипта. Этим скриптом пиши в базу время последнего конекта и если разница между "сейчас" и "тогда" больше N = юзер вышел.

Спасибо, такой вариант я уже использую - но он не точный. Поставил на Cron задание запускать php скрипт каждые 3 минуты, который удаляет id где разница во времени между "сейчас" и "тогда" больше N. Нужна максимальная точность...Тем более это текстовый чат. а если юзер переписываться будет полчаса, а удаляться будет все, где разница во времени 3 мин?

Bgg 20.10.2011 02:01

Поддерживать сокет соединение.

linnard 20.10.2011 02:04

Цитата:

Сообщение от Bgg (Сообщение 1040490)
Поддерживать сокет соединение.

А каким образом? Разве Flex поддерживает работу с сокетами?

Bgg 20.10.2011 02:25

Гугл с документацией молчат о сокете?

alatar 20.10.2011 03:12

поддерживает

Dimitry_II 20.10.2011 05:54

"flex" + "chat" - только сокеты! Иначе это какой-то хромой чат.

На крайний случай можно использовать такую штуку, как Gravity у GraniteDS (само собой, если на сервере Java) - это не сокет, а Long Polling, но есть возможность отслеживать разрыв соединения (под Линукс везде, под Винду не всегда корректно отрабатывает под ИЕ - это если мгновенно, или 2-5 секунд - таймаут - во всех браузерах под все платформы). Разумный плюс - не надо использовать еще один порт, все на 80-ом может работать. Ну, и естественные вкусности фреймворка - удобство, AMF, RemoteObjects, RemoteProcedureCall. BlazeDS тоже имеет "на борту" похожую штуку, но она значительно проще.

linnard 20.10.2011 20:36

Всем спасибо. Буду читать про Gravity.

Dimitry_II 21.10.2011 01:13

Нужны будут консультации - пиши в разделе сетевых технологий.


Часовой пояс GMT +4, время: 14:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.