Случайная недействительность сеанса

Я запускаю веб-приложение J2EE в Tomcat, и недавно мне поручили добавить метрики в приложение. Я использую SessionListener для определения момента уничтожения сеанса, а затем загружаю метрики в базу данных. Тайм-аут моего сеанса установлен в моем web.xml на 30 минут, и я нигде не аннулирую сеанс программно. Часто в течение 15-10 минут входа в систему для тестирования я вижу 3 или 4 набора метрик, загруженных в базу данных, все с разными идентификаторами сеанса.

Помимо web.xml и session.invalidate(), что еще может привести к уничтожению сеанса в Tomcat? Исключения? Будет ли Tomcat когда-либо случайным образом аннулировать сеансы?


person jconlin    schedule 20.04.2009    source источник
comment
Используете ли вы постоянные сеансы?   -  person trunkc    schedule 21.04.2009
comment
Я не использую постоянные сеансы.   -  person jconlin    schedule 21.04.2009
comment
Ваш журнал должен создавать только один сеанс, вы упомянули, что он создает 3 или 4. Сохраняете ли вы метрики только при уничтожении сеанса или также при его создании?   -  person Bhushan Bhangale    schedule 21.04.2009


Ответы (2)


Возможно, ваш веб-браузер решил не отправлять файл cookie сеанса по запросу в веб-приложение, где ваше приложение ожидало бы его. Я видел, как это происходило с правилом перезаписи Apache; URL-адрес за пределами пути файла cookie сеанса был перенаправлен в веб-приложение. Произошло примерно следующее (детали могут быть неверными):

  • мое веб-приложение находилось в /app/
  • таким образом, файл cookie сеанса был привязан к этому пути /app/
  • страница в веб-приложении, на которую ссылается /img/magic.jpeg
  • браузер не отправил файл cookie сеанса в своем запросе на это изображение (путь не совпадает)
  • сервер перенаправил запрос (внутренне) на /app/createImage?magic
  • веб-приложение не получило файл cookie сеанса, поэтому оно создало новый сеанс

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

person beetstra    schedule 20.04.2009

Это, вероятно, не то, что происходит на вашем сервере, но если системное время на сервере установлено вперед, это может привести к тому, что сеансы истечет быстрее, чем «прошедшее время» в 30 минут. Tomcat — по крайней мере, с 5.5 — использовал «время часов» для истечения срока действия сеансов, поэтому изменение системных часов повлияет на время жизни сеанса.

person Eddie    schedule 20.04.2009