![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Есть основная страничка jsp, куда зашел посетитель. У любого посетителя отображаются данные, общие для всех посетителей. Произошла регистрация, вход или прочие действия, которые предоставляет данная страничка.
В определенном месте подразумевается многооконное использование сайта, когда посетитель открывает ряд окошек, в которых производит определенные действия. Отслеживание открытия таких окошек не представляется сложным. Открытие таких окошек находит отражение в основном окне, вне зависимости, открыл их текущий посетитель или любой другой на своей странице. Вопрос в том, как отследить закрытие такого окошка ... Обработка с помощью HttpSessionListener не проходит, так как сессия для основного окна и для таких окошек одинаковая, то есть метод sessionDestroyed() не вызывается. Интуитивно вижу два варианта: 1. для каждого окошка создавать свою сессию (можно ли?) и тогда можно отловить в слушателе. 2. создать параллельный процесс, куда будут передаваться идентефикаторы окошек и он постоянно будет их опрашивать (например, AJAX из окошка будет периодически связываться и если по истечеии задержки не было "связи" ... и т.д.) и соответственно реагировать на изменения - но как создать такой параллельный процесс? И еще один вопрос. Если пользователь закрыл основное окно, метод sessionDestroyed() будет вызван через 30 минут (по умолчанию). А я хочу, чтобы реагировал максимально быстро ... Если поставить time-out в web.xml в какое-то небольшое значение, и если пользователь будет просто смотреть на страничку это время, вылетит ли сессия через этот промежуток? Спасибо. |
|||
|
||||
y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 7 Всего: 13 |
нельзя. Точнее можно, если использовать не куки а только SID и пихать его в каждую ссылку. Каждому окну можно выдавать айдишник при обращении к сервлету, который ее выдает. Можно навесить на ивент закрытия окна навесить джаваскрипт, который будет перед закрытием окна на некий сервлет постить айдишник этого окна, в сервлете можно выполнять необходимые действия на сервере... бррр ![]() Это сообщение отредактировал(а) y3u - 7.9.2007, 14:22 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
Aoli |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 24.1.2007 Репутация: -1 Всего: 0 |
Для каждой странички можно создать свою сессию, достаточно написать фильтр.
Но не для каждого окошка браузера! Как вариант могу предложить такое решение: В web.xml ставишь тайм-аут сессии, скажем, минуту. С помощью AJAX посылаешь байт на сервер каждые 50 секунд. В итоге, и сессия жива, т.к. сервер дергается и закроешь ее достаточно оперативно. Но нужно помнить, что это лишняя нагрузка на сервер. |
|||
|
||||
Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
В окне:
Когда окно будет закриваться сработает на 100%. ![]() |
|||
|
||||
Aoli |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 24.1.2007 Репутация: -1 Всего: 0 |
Т.е. 1. при посте формы на сервер, пользователь будет сперва терять сессию. 2. Его будут просить залогиниться. 3. Он снова будет заполнять форму и переходить к шагу 1. "Пони бегает по кругу" (С) Не помню кто |
|||
|
||||
Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
А по4ему тy не хо4еш' постить 4ерез Ajax? Страница не будет перегружаться.
|
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
О! Супер!
Если честно, то я не знал, как отловить в окне событие закрытия окна. Естественно, при перехвате такого сообщения я отправлю через AJAX запрос (который даже и не должен возвращаться, тем более, к моменту возврата окно уже будет закрыто). Спасибо за дельные советы. Тогда еще вопрос-консультация: у меня в основном окне каждые 10 секунд идет опрос сервлета через AJAX, чтобы интерактивно отслеживать вход и выход посетителей. Не сильно ли это накладно для сервера? - Специально для разгрузки я опрашиваю не БД, а переменную-массив, которая создается в момент запуска сервлета (то есть постоянна) и данные едины, то есть переменная не перегружается для каждого посетителя ... Так вот сам вопрос: правильна ли такая реализация? Спасибо. |
|||
|
||||
Tony |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Теперь будешь знать ![]()
Да правильно. Т.к. onbeforeunload не даёт гарантии при ошибки браузера(завис или 4его нибуьт ещё). Нас4ёт времени: 10 сек или больше. Зависит от того как шустро будут работать усери. Если медленно, то ставь больше время(delay). 4ем меньше тр****шь сервер тем лутше. |
||||
|
|||||
y3u |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 7 Всего: 13 |
http://developer.mozilla.org/en/docs/DOM:window.onclose как обычно, у майкрософта все через анус, http://msdn2.microsoft.com/en-us/library/ms536907.aspx
ты не путай, хэндлер надо делать не на body.onbeforeunload, а на window.onbeforeunload. В мсдн просто написаны случаи для всех хендлеров. При посте формы перегружается боди, а окно - нет. ничего естественного, если запрос не асинхронный и не возвращает данные. Хотя, это будет самый простой вариант. -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
||||
|
|||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Всем большое спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |