Клиент закончил сессию с сервлетом. Проблема!!!
От: debjet Россия  
Дата: 05.10.02 14:52
Оценка:
Привет!

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

Помогите кто может и чем может!!!

Заранее спасибо!!!
Желаю удачи!!!
Re: Клиент закончил сессию с сервлетом. Проблема!!!
От: Mr WeL Россия  
Дата: 06.10.02 23:59
Оценка:
Здравствуйте debjet, Вы писали:

D>Привет!


D>У меня Есть сервлет. При подключении клиента, создается новая сессия, и в базе данных проставляется флаг о том, что клиент подключился. Но проблема в том, что я не знаю, как отследить произвольное отсоединение клиента( например закрытие браузера) и проставить ему соответствующий флаг в базе данных о том, что клиент перешел в режим OFFLINE.


D>Помогите кто может и чем может!!!


D>Заранее спасибо!!!


А зачем тебе это ? ? ? Тот факт что юзер работает, где то используется ?
Re[2]: Клиент закончил сессию с сервлетом. Проблема!!!
От: debjet Россия  
Дата: 07.10.02 03:16
Оценка:
Здравствуйте Mr WeL, Вы писали:

MW>А зачем тебе это ? ? ? Тот факт что юзер работает, где то используется ?


Да! Дело в том, что мне необходимо иметь возможность посмотреть, кто из юзеров сейчас находится в режиме ONLINE, а кто в режиме OFFLINE. А как я узнаю, что юзер перешел в режим OFFLINE, когда он закрыл окно браузера? В данный момент я сделал так:
Когда юзер подключается к системе, то в базе данных ему проставляется флаг, о том, что юзер подключился, а когда он отрубается, то флаг должен отрубаться...
Вот я и не знаю как его отрубить, после того как юзер закрыл окно браузера
Желаю удачи!!!
Re[3]: Клиент закончил сессию с сервлетом. Проблема!!!
От: Pharod  
Дата: 07.10.02 12:40
Оценка:
Здравствуйте debjet, Вы писали:

D>Да! Дело в том, что мне необходимо иметь возможность посмотреть, кто из юзеров сейчас находится в режиме ONLINE, а кто в режиме OFFLINE. А как я узнаю, что юзер перешел в режим OFFLINE, когда он закрыл окно браузера? В данный момент я сделал так:

D> Когда юзер подключается к системе, то в базе данных ему проставляется флаг, о том, что юзер подключился, а когда он отрубается, то флаг должен отрубаться...
D> Вот я и не знаю как его отрубить, после того как юзер закрыл окно браузера

После того как клиент получил твой response все кончилось.
Сервлет отработал и больше никакой инфы ты ниоткуда не получишь.
Максимум о чем может узнать сервлет — это о прекращении клиентом получения response: браузер он закрыл или кнопку stop нажал в браузере, или на другой урл ушел не дожидаясь загрузки, etc. То что тебе нужно проще всего сделать по другому: прими априори, что если клиент некое разумное время не делает request-ов, значит он "ушел", а в базе просто обновляй время последнего реквеста. Чаще всего так и делают. Если не устраивает — "пингуй" сервер с клиента, например апплетом или сделай скрытый фрейм (или iframe) и оттуда допустим каждые десять секунд дергай что-то что будет обновлять время последнего request в базе. Но это геморно будет...

--
Pharod
wbr,
Igor
Re: Клиент закончил сессию с сервлетом. Проблема!!!
От: debjet Россия  
Дата: 07.10.02 13:59
Оценка:
Я вот тут нарыл некую информацию про существование некого
интерфейса HttpSessionBindingListener методы, которого якобы вызываются
при толкании и выталкивании объектов из сессии, реализующих этот интерфейс, но
пока не знаю, работает это при уничтожении сессии или нет?
Желаю удачи!!!
Re[2]: Клиент закончил сессию с сервлетом. Проблема!!!
От: Danissimo Россия  
Дата: 07.10.02 14:52
Оценка:
Здравствуйте debjet, Вы писали:

D> Я вот тут нарыл некую информацию про существование некого

D>интерфейса HttpSessionBindingListener методы, которого якобы вызываются
D>при толкании и выталкивании объектов из сессии, реализующих этот интерфейс, но
D>пока не знаю, работает это при уничтожении сессии или нет?

Работает...

Есть еще интерфейс HttpSessionListener, определенный в спецификации 2.3. Он настраивается в web.xml. Вызывается дважды: при создании сессии и при разрушении.

Подтверждаю слова Pharod'а.

Наверняка решемая проблема идеологически неверна. Как вариант могу сказать, что уважающие себя серверы могут сообщить количество открытых сессий. Можно покопаться в серверном API.

Проблема идеологически неверна, так как инициатотор дискуссии пытается, используя HTTP, контролировать клиентов, то есть держать дуплексный режим обмена, что невозможно в соответствии со спецификацией HTTP. Сказано, что "HTTP is a stateless comunication protocol".

Матчасть надо учить.
Данис Тазеев
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.