У меня Есть сервлет. При подключении клиента, создается новая сессия, и в базе данных проставляется флаг о том, что клиент подключился. Но проблема в том, что я не знаю, как отследить произвольное отсоединение клиента( например закрытие браузера) и проставить ему соответствующий флаг в базе данных о том, что клиент перешел в режим OFFLINE.
Помогите кто может и чем может!!!
Заранее спасибо!!!
Желаю удачи!!!
Re: Клиент закончил сессию с сервлетом. Проблема!!!
Здравствуйте debjet, Вы писали:
D>Привет!
D>У меня Есть сервлет. При подключении клиента, создается новая сессия, и в базе данных проставляется флаг о том, что клиент подключился. Но проблема в том, что я не знаю, как отследить произвольное отсоединение клиента( например закрытие браузера) и проставить ему соответствующий флаг в базе данных о том, что клиент перешел в режим OFFLINE.
D>Помогите кто может и чем может!!!
D>Заранее спасибо!!!
А зачем тебе это ? ? ? Тот факт что юзер работает, где то используется ?
Re[2]: Клиент закончил сессию с сервлетом. Проблема!!!
Здравствуйте Mr WeL, Вы писали:
MW>А зачем тебе это ? ? ? Тот факт что юзер работает, где то используется ?
Да! Дело в том, что мне необходимо иметь возможность посмотреть, кто из юзеров сейчас находится в режиме ONLINE, а кто в режиме OFFLINE. А как я узнаю, что юзер перешел в режим OFFLINE, когда он закрыл окно браузера? В данный момент я сделал так:
Когда юзер подключается к системе, то в базе данных ему проставляется флаг, о том, что юзер подключился, а когда он отрубается, то флаг должен отрубаться...
Вот я и не знаю как его отрубить, после того как юзер закрыл окно браузера
Желаю удачи!!!
Re[3]: Клиент закончил сессию с сервлетом. Проблема!!!
Здравствуйте debjet, Вы писали:
D>Да! Дело в том, что мне необходимо иметь возможность посмотреть, кто из юзеров сейчас находится в режиме ONLINE, а кто в режиме OFFLINE. А как я узнаю, что юзер перешел в режим OFFLINE, когда он закрыл окно браузера? В данный момент я сделал так: D> Когда юзер подключается к системе, то в базе данных ему проставляется флаг, о том, что юзер подключился, а когда он отрубается, то флаг должен отрубаться... D> Вот я и не знаю как его отрубить, после того как юзер закрыл окно браузера
После того как клиент получил твой response все кончилось.
Сервлет отработал и больше никакой инфы ты ниоткуда не получишь.
Максимум о чем может узнать сервлет — это о прекращении клиентом получения response: браузер он закрыл или кнопку stop нажал в браузере, или на другой урл ушел не дожидаясь загрузки, etc. То что тебе нужно проще всего сделать по другому: прими априори, что если клиент некое разумное время не делает request-ов, значит он "ушел", а в базе просто обновляй время последнего реквеста. Чаще всего так и делают. Если не устраивает — "пингуй" сервер с клиента, например апплетом или сделай скрытый фрейм (или iframe) и оттуда допустим каждые десять секунд дергай что-то что будет обновлять время последнего request в базе. Но это геморно будет...
--
Pharod
wbr,
Igor
Re: Клиент закончил сессию с сервлетом. Проблема!!!
Я вот тут нарыл некую информацию про существование некого
интерфейса HttpSessionBindingListener методы, которого якобы вызываются
при толкании и выталкивании объектов из сессии, реализующих этот интерфейс, но
пока не знаю, работает это при уничтожении сессии или нет?
Желаю удачи!!!
Re[2]: Клиент закончил сессию с сервлетом. Проблема!!!
Здравствуйте debjet, Вы писали:
D> Я вот тут нарыл некую информацию про существование некого D>интерфейса HttpSessionBindingListener методы, которого якобы вызываются D>при толкании и выталкивании объектов из сессии, реализующих этот интерфейс, но D>пока не знаю, работает это при уничтожении сессии или нет?
Работает...
Есть еще интерфейс HttpSessionListener, определенный в спецификации 2.3. Он настраивается в web.xml. Вызывается дважды: при создании сессии и при разрушении.
Подтверждаю слова Pharod'а.
Наверняка решемая проблема идеологически неверна. Как вариант могу сказать, что уважающие себя серверы могут сообщить количество открытых сессий. Можно покопаться в серверном API.
Проблема идеологически неверна, так как инициатотор дискуссии пытается, используя HTTP, контролировать клиентов, то есть держать дуплексный режим обмена, что невозможно в соответствии со спецификацией HTTP. Сказано, что "HTTP is a stateless comunication protocol".