HttpSessionListener не обнаруживает время ожидания сеанса

У меня есть реализация javax.servlet.http.HttpSessionListener, которая должна обнаруживать недействительность/тайм-аут сеанса пользователя в проекте Struts.

Кажется, что sessionDestroyed() никогда не вызывается, я могу воспроизвести это, удалив свой JSESSIONID и обновив страницу. Я также обнаружил, что оставление браузера открытым до истечения времени сеанса имеет тот же эффект.

Сайт работает на JBoss 4.2.3.GA с Java 1.5.

Я начинаю подозревать, что HttpSessionListener не делает того, что я ожидаю, я что-то упустил?

Изменить:

Мой слушатель зарегистрирован в моем файле web.xml следующим образом:

<listener>
    <listener-class>com.domain.web.listener.LogoutListener</listener-class>
</listener>

person seanhodges    schedule 22.03.2011    source источник
comment
Вы настроили прослушиватель в web.xml?   -  person Suresh Kumar    schedule 22.03.2011
comment
@Suresh да, мой слушатель настроен в файле web.xml; обновит мой вопрос   -  person seanhodges    schedule 22.03.2011
comment
У меня такая же проблема с Tomcat и Java 1.7: «sessionDestroyed» не всегда вызывается после тайм-аута сеанса, когда браузер открыт.   -  person Andremoniy    schedule 15.01.2014
comment
@Andremoniy Если браузер открыт и отображает страницу сайта, возможно, он отправляет запросы через плагины (например, Firebug), которые поддерживают сеанс. Помните также, что sessionDestroyed вызывается только тогда, когда данные сеанса были уничтожены на сервере, что не обязательно совпадает с моментом, когда пользователь потерял к ним доступ.   -  person seanhodges    schedule 17.01.2014


Ответы (2)


Метод sessionDestroyed() не вызывается до тех пор, пока веб-контейнер не истечет срок действия сеанса. Сервер не знает, что вы удалили файл cookie JSESSIONID, ваш браузер просто выглядит как еще один новый сеанс.

Из того, что я видел с Tomcat, и я считаю, что это зависит от каждой реализации веб-контейнера, истечение срока действия сеанса происходит каждую минуту. Таким образом, даже после истечения срока действия сеанса может быть задержка до следующего обнаружения истечения срока действия.

Хотя в конце концов это обязательно должно произойти. Особенно, если вы установите тайм-аут на минуту и ​​подождите несколько минут. Обратите внимание, что тайм-аут указывается в минутах, поэтому одна минута — это минимум для проверки. Я предполагаю, что ваш слушатель зарегистрирован в вашем файле web.xml?

person WhiteFang34    schedule 22.03.2011
comment
Это имеет смысл, я попытаюсь настроить время ожидания сеанса в JBoss, чтобы увидеть, не ждал ли я достаточно долго. - person seanhodges; 22.03.2011

вам необходимо зарегистрировать прослушиватель в web.xml в WEB-INF в вашем приложении. имя вашего класса слушателя

person xiaqingjue    schedule 01.07.2011