2010-11-24 4 views
8

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

Проблема: Это Spring MVC (2.5.6.) Веб-приложение, которое работает в Tomcat 6. Когда начальная страница запрашивается перенаправляет клиента к JSP-страницы (с помощью мета-тегов HTML обновления экрана в) который загружает контент с большим количеством запросов Ajax (Framework: Prototype). Проблема в том, что Tomcat создает новый сеанс для каждого запроса AJAX (около 67 сеансов). Моя первая мысль заключалась в том, что Session Cookie хранится после загрузки начальной страницы и запросы Ajax заставляют Tomcat создавать новый сеанс. Мой подход заключался в том, чтобы вручную создать файл cookie сеанса, но это не имело никакого значения. Самое смешное, что он работает в некоторых других экземплярах tomcat, но не в желаемой среде для тестов интеграции. По-моему, это проблема конфигурации Tomcat.

После дальнейших исследований с Firebug, я узнал, что Tomcat создает новый сеанс для каждого запроса, даже если право JSESSIONID перетекает к нему (50B5EA0BCFE811C744CE9C1F9EDE0097):

Request Header 1: 
Cookie JSESSIONID=F3206CBF2C961E125821FF22FA31A02D 

Response Header 1: 
Set-Cookie JSESSIONID=49E000B4D6880F4F94531AB9C78DB667; Path=/JOCA-Music-Portal JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097; Path=/JOCA-Music-Portal 

Request Header 2: 
Cookie JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097 

Response Header 2: 
Set-Cookie JSESSIONID=DCCA2D1B98D11223A6B8855800276E27; Path=/JOCA-Music-Portal 

UPDATE: Дальнейшие исследования выделили проблему конфигурации Tomcat Realm. Мы используем JDBC Realm для входа. Когда логин деактивирован, создается только один сеанс. Если он активирован, Tomcat создает сеансы с недействительными/истекшими, поэтому с каждым запросом создается новый сеанс. Но почему Tomcat ведет себя так?

Я действительно в отчаянии, поэтому любая мысль/подсказка/решение хорошо оценены.

Большое спасибо

+0

Вы получили решение? – 2012-07-24 07:47:56

ответ

3

Вы можете попробовать analyze the HTTP traffic между вашим клиентом и сервером. Убедитесь, что заголовок Cookie установлен правильно в запросе и ответе.

Если вы используете Firefox, вы можете попробовать отладить с помощью Firebug.

+0

Прежде всего, спасибо за ваш ответ. Заголовок cookie настроен правильно, я проверил с Firebug. Я забыл упомянуть, что в некоторых других средах он работал без проблем, но не в среде тестирования интеграции. – Fabe 2010-11-24 20:35:09

+0

Есть ли `cookies = false` в разделе` `вашей конфигурации Tomcat? Какова ценность `useHttpOnly`? – gawi 2010-11-24 21:10:38

2

Мы недавно столкнулись с тем же вопросом с приложением, которое мы разрабатывали. Приходите, чтобы узнать, проблема в том, что Tomcat был изменен, чтобы предотвратить атаки с фиксацией сеанса. По умолчанию при аутентификации создается новый идентификатор сеанса. Это началось с 6.0.21. Проверьте параметр конфигурации контекста 'changeSessionIdOnAuthentication' (ошибка/проблема tomcat равна https://issues.apache.org/bugzilla/show_bug.cgi?id=45255).

0

Мы столкнулись с той же проблемой, но при использовании пользовательской аутентификации EXTERNALSSO. Решение заключалось в том, чтобы явно отключить его в конструкторе нашего класса, который наследуется от org.apache.catalina.authenticator.AuthenticatorBase:

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