2009-08-29 3 views
0

есть альтернатива Javascript onUnload? Я использую JSP Jakarta Struts каркас с Сервлеты.Альтернатива для JavaScript onUnload

Я должен знать, когда закрывается окно, потому что не все нажимают кнопку выхода.
Как вы справляетесь с этим в своих приложениях?

ответ

5

Вообще говоря, невозможно окончательно определить, посетитель все еще «использует» (или даже смотрит) вашу страницу. После того, как браузер загрузил страницу, он больше не контактирует с сервером, поэтому страница может оставаться открытой в течение нескольких секунд или нескольких лет, и сервер не знал бы.

Событие unload, безусловно, полезный ключ, так как он обычно срабатывает при разгрузке страницы. Однако это не совсем надежно. Существует множество ситуаций, когда он не срабатывает, и еще много чего, даже если он срабатывает, ваш сервер не будет знать об этом.

Например: браузер (или даже операционная система) может выйти из строя или выйти из строя. Посетитель, использующий Wi-Fi, может быть отключен или может переносить свой iPhone в туннель при использовании вашего сайта.

Стандартное обходное решение для этого - что мы все с готовностью признаем, страшно - это позволить тайм-ауту сеанса посетителя. Даже на веб-сайтах с высокими ставками вы обнаружите, что если вы уйдете от своего компьютера в течение четырех минут и вернетесь, вы все равно получите доступ, но если вы уйдете на пять, вы заперты.

Эта настройка, безусловно, находит много ложных срабатываний: случаи, когда посетитель все еще использует вашу страницу, не взаимодействуя с ней, и поэтому неудовлетворен таймаутом. Он также допускает ложные негативы: случаи, когда настоящий посетитель ушел, а вредоносный пользователь переходит в течение периода ожидания.

Единственным важным дополнением к этой схеме, которую мы видели в последнее время, является использование JavaScript для явного входа пользователя в систему после периода ожидания. Опять же, мы видим это на банковских сайтах: слишком долго оставляйте страницу открытой, и когда вы вернетесь, вы увидите экран входа. (Конечно, это тоже зависит от JavaScript, и поэтому все еще ошибочно.)

К сожалению, поскольку HTTP - это протокол без гражданства, мы никогда не сможем точно знать, что происходит в браузере (особенно если JavaScript), поэтому дешевые обходные пути - это все, что мы можем использовать.

+2

Я бы не сказал, что это _impossible_, просто очень сложно. Всегда есть обнаружение движения + Flash + Webcam + + обнаружение лица. –

0

Вы должны знать, что Opera не выполняет onUnload, как вы подозреваете. И вы не должны полагаться на javascript, чтобы увидеть, закрывают ли пользователи окна.

+0

Да, но я ищу альтернативу для события onunload ... – wokena

0

Я полагаюсь на тайм-аут сеанса сервлета, чтобы автоматически обрабатывать выход. Вы можете зарегистрировать обработчик, когда время сеанса истечет, чтобы покрыть любую очистку учетных данных, которую вам нужно сделать. Хороший пример приведен здесь:

http://www.xyzws.com/Servletfaq/when-do-i-use-httpsessionlistener/7

Там нет никакой гарантии со стороны клиента, что пользователь всегда подтвердит, что они закончили с помощью вашего сайта.

Смежные вопросы