2015-11-03 2 views
3

Я работаю над веб-приложением, используя Wicket, который работает на сервере Jetty.Wicket неожиданный идентификатор сеанса

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

Каков наилучший способ аннулирования сеанса сеанса и выяснить причину этой проблемы?

+0

Исключили вы вероятность того, что вы (или кто-то другие) перезапуск сервера? – aioobe

+0

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

+0

Возможно, это был просто тайм-аут сеанса. –

ответ

3

На стороне Jetty вы можете настроить сервлет javax.servlet.http.HttpSessionListener для регистрации различных событий создания/уничтожения.

Создайте свой собственный класс для этого, и добавить его в свой WEB-INF/web.xml

<web-app> 
    <listener> 
     <listener-class>MySessionListener</listener-class> 
    </listener> 
+0

Или вы можете использовать аннотацию '@ WebListener': http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebListener.html и реализовать интерфейс' HttpSessionListener' , –

+0

Я пробовал этот метод, и он несколько помогает получить отладочную информацию о недействительности сессии и ее создании. Это не помогает мне отслеживать проблему здесь, потому что она дает информацию в какой-то момент слишком поздно. Я ищу точку, в которой входящий jsessionid проверяется на наличие какой-либо «внутренней таблицы идентификаторов сеанса». Если идентификатор сеанса не распознается, он должен предупредить меня в журнале. (существующий файл cookie, неверный идентификатор) – Cloud

1

Вы можете написать подкласс WebSession и переопределить метод invalidate() для распечатки StackTrace перед тем недействительности.

Это поможет определить, является ли признание недействительной сессии происходит из-за чего-то в Wicket или что-то за пределами Wicket