У нас есть одно веб-приложение, которое создается для обслуживания нескольких региональных ДВУ веб-сайтов. Кроме того, веб-приложение также поддерживает тысячи динамических поддоменов. Примеры включают в себя:
www.example.com
www.example.co.uk
www.example.com.ar
fred123.example.co.uk <== Thousands of this form
fred123.p.example.us <== Thousands of this form
Хотя мы можем понять, что разные доменные домены приводят к новым сеансам, с последними двумя примерами выше начинает появляться проблема, которая также приводит к новым экземплярам сеансов. Например, если пользователь:
- Переходит на: www.example.co.uk, создается новый сеанс, а затем ...
- Кликает по ссылке: fred123.example.co.uk, создается новый сеанс, а затем ...
- Кликает по ссылке: sam99.example.co.uk создается новый сеанс ...
3 клика == >> 3 сеанса !!!!
Проблема, по-видимому, связана с тем, что GlassFish v3 автоматически делает домен JSESSIONID полным доменным именем запроса хоста.
Требуется, чтобы часть имени хоста была удалена из значения домена, как минимум, для значений доменов, таких как:
.example.com
.example.co.uk
.example.com.ar
.example.co.uk <== Thousands of this form
.p.example.us <== Thousands of this form
Кто-нибудь знает, как этого можно достичь. Я обнаружил следующие вопросы и ответы, однако в нашем случае не полностью совпадают домены верхнего уровня:
Проблема, связанная с сеансом JSP
Ergo решение статической настройки sun-web.xml ИЛИ с использованием решения Servlet 3.0, похоже, не помогает. Кроме того, создание оболочки ответа фильтра также не работает, поскольку файл cookie JSESSIONID назначается на нижних уровнях сервера приложений и не подвергается веб-приложению для перехвата.
Единственные два других варианта, которые у меня есть:
a) Исправьте код GlassFish v3, который устанавливает значение домена cookie JSESSIONID в FQDN, чтобы произошло некоторое удаление ИЛИ
b) Что-то сделать на уровне обратного прокси-сервера Sun Web Server 7.0, чтобы мы переписали значение домена cookie JSESSIONID, возвращаемое в заголовке set-cookie, однако я не смог найти примеров, как это сделать
Может кто-нибудь помочь решить эту проблему? Любые подсказки / помощь будут очень цениться!