2011-01-17 3 views
4

У меня есть приложение на основе сервлета jsp, время сеанса из 30 минут, я хочу аннулировать сеанс, как только человек закрывает окно браузера преднамеренно или случайно (выключение ОС/закрытие от tast manager/powerdown)Invalidate session

Могу ли я поставить чек на это и аннулировать сеанс?

ответ

3

Невозможно обработать этот сценарий.

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

В макс:

Вы можете сделать опрос со страницы (может быть заголовок) так же, как GTalk в Gmail, как только соединение закрывается вытирать эту сессию вне.

+0

@ ororg.life.java - Jigar Joshi - вы получите – Varun

+2

* для более поздней части * возможно, вы использовали google chat из gmail из веб-браузера, поскольку вы могли заметить, что при закрытии соединения он показывает * try in. . * Я следую этому механизму, который делает непрерывный опрос сервером при закрытии бровей или завершении работы машины, и вы можете обнаружить, что теперь настало время сделать недействительным сеанс, из источника, который вам нужен, чтобы создать хорошо продуманный apttern для этого, иначе будет накладные расходы –

+0

комментарий лучше ответа :) –

0

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

1
  1. Почему вы хотите, чтобы сделать это, вы уже настроили, что в сервере, что сессия должна бездействовать в течение 30 минут, после чего он истекает в сервере.

  2. , если вы хотите сделать это с помощью следующих JavaScript или JQuery (лучше для кросса-браузера), когда просмотр близко событие происходит отправить запрос Аякса аннулирует сеанс, выполнив следующий код в JSP (request.getSession(false).setMaxInactiveInteral(0);)

    Из JavaScript

    <body onbeforeunload="doAjaxCall();"> 
    
        (or) 
    
    jQuery(window).bind("beforeunload", function(){ 
    
    // Do ajax request and dont wait for the response. 
    
    }); 
    
  3. Вы можете реализовать сервер нажимной АЯКС опроса, например, считают, что сессия будет истекать в еще 2 секунды, отправить запрос на стороне сервера к клиенту, чтобы аннулировать куки, а также на сервере вы можете идите в сеанс.

if ((getcurrentTime() - session.getCreationTime()) > 2000) { 
} 
  1. Хотя страница отображается, получить maxinactiveinterval, а затем установите значение переменной JavaScript, а затем использовать setInterval функцию, передать inactiveinterval значение функционировать, когда тайм-аут вы можете установить срок действия файла cookie.
+0

Отправка запросов ajax внутри события 'beforeunload' или' unload' не является поддерживаемый большинством браузеров, поэтому вы, безусловно, не должны полагаться на это. Просто позвольте сеансу истекать или сокращать свою жизнь и использовать опрос, чтобы поддерживать его. – BalusC

0

При использовании Tomcat 5.0/5.5/6.0 контейнера, печенье генерируется TOMCAT менеджером сеансов для отслеживания сеанса (JSESSIONID) является за сессии куков (браузер память только куки) вместо упорная печенья (записать на диск). Это связано с тем, что диспетчер сеанса выполняет (hardcoded) setMaxAge (-1), так что сгенерированный HTTP-ответ содержит: Set-Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Path=/ и № Expire=date.

Итак, когда браузер закрыт (все окна браузера или просто окно, содержащее файл cookie, в зависимости от версий браузера variuos), cookie - и сеанс - теряются.[*]

Это не имеет ничего общего с <session-timeout>, что параметр, который указывает на стороне сервера менеджер сеанса кот истечь сеансов, когда чем указано простаивает больше времени.

[*] они все равно будут сохраняться на диске на стороне сервера, до истечения времени ожидания сеанса, но не будет запроса с активизацией их cookie.

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