Сбросить JSessionID при изменении URL

В настоящее время я интернационализирую веб-сайт и столкнулся с некоторыми проблемами, связанными с jsessionIDs. Я использую веб-сервер Apache, который распределяет нагрузку между несколькими серверами приложений JBoss через mod_jk.

Когда я попадаю на сайт по URL-адресу ГБ по умолчанию, jsessionID правильно создается на выделенном сервере приложений jboss. например www.mysite.com создать сеанс GB_Jboss.

Когда я обновляю URL-адрес до www.mysite.com/fr, я хочу, чтобы новый jsessionID был создан на FR_JBoss.

Когда я обновляю URL-адрес до www.mysite.com/us, я хочу, чтобы новый jsessionID был создан на US_JBoss.

Однако каждый раз, когда я обновляю URL-адрес, он всегда отображает исходный jsessionID.

Я надеюсь это имеет смысл? Любые идеи, как я могу заставить это работать через Apache? Или это проблема балансировки нагрузки в балансировщике нагрузки?


person MPatel    schedule 25.07.2011    source источник


Ответы (1)


Любопытно узнать, почему вы хотите иметь новый сеанс для другого URI. Во всяком случае, несколько вариантов, которые я могу придумать:

  1. Добавьте запись в файл cookie для URI, для которого вы создали сеанс. Например, если yoursite/fr первым получил сеанс, добавьте его в файл cookie клиента. В каждом запросе вы можете использовать фильтр, чтобы проверить, отличается ли URI от указанного в файле cookie. если да, аннулируйте этот сеанс и позвольте создать новый для пользователя.
  2. Поддерживайте одноэлементный HashMap на стороне сервера, который имеет сопоставление URI сайта и идентификатора сеанса. Если URI сайта не совпадает с идентификатором сеанса в каждом запросе - аннулировать сеанс. Недостатком этого подхода является то, что HashMap необходимо реплицировать на все узлы в кластере, чтобы он работал правильно после переключения на другой сервер.
person helios    schedule 26.07.2011
comment
Причина, по которой мне нужен новый сеанс, заключается в том, что на сайте есть корзина для покупок. Каждый раз, когда пользователь переключает URI, требуется новый сеанс. Ваши предложения звучат так, как будто мне нужно внести изменения в код. Можно ли что-нибудь сделать на уровне Apache? - person MPatel; 27.07.2011
comment
Я не уверен, как это сделать на Apache. Я предложил решение, которое включает изменения кода, поскольку вы упомянули, что находитесь в процессе интернационализации своего сайта. В любом случае, интересно, будет ли пользователь часто переключаться между URI - потому что, если они сделают любую реализацию, которую вы выберете, убедитесь, что все сеансы сирот сразу же аннулируются. Вы не хотите, чтобы они быстро накапливались, потребляли больше памяти и замедляли репликацию данных между узлами кластера. - person helios; 27.07.2011