Tomcat создает новый сеанс для каждого запроса - PullRequest
8 голосов
/ 24 ноября 2010

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

Проблема: Это Spring MVC (2.5.6.) WebПриложение, которое запускается в Tomcat 6. Когда запрашивается стартовая страница, оно перенаправляет клиента на страницу JSP (с помощью тегов HTML meta meta refresh), которая загружает его содержимое с большим количеством запросов 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

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

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

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

Ответы [ 3 ]

3 голосов
/ 24 ноября 2010

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

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

2 голосов
/ 23 февраля 2011

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

0 голосов
/ 09 февраля 2012

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

super.setChangeSessionIdOnAuthentication(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...