Как мы можем вернуть определенный сеанс с помощью sessionId? - PullRequest
0 голосов
/ 31 марта 2009

Я работаю над задачей, которая включает перемещение / перемещение из одного приложения в другое. Приложения находятся в отдельных JVM.

При переходе в другое приложение я отслеживаю идентификатор сеанса. Однако, когда я перемещаюсь назад и вперед, создается новый сеанс. Можно ли как-нибудь вернуться к тому же сеансу, используя идентификатор сессии, который я сохраняю, когда возвращаюсь в родительское приложение из дочернего приложения?

Среда: J2EE с WebSphere.

Ответы [ 3 ]

1 голос
/ 13 мая 2009

Как уже упоминалось в Mork0075, идентификатор сессии привязан к имени файла cookie и домену сервера. Если вы используете один и тот же домен сервера для двух приложений на разных JVM, я вижу два варианта для поддержания сеанса при переключении между приложениями:

Длинный выстрел: 1) Если вы используете базу данных для репликации сеанса, вы можете использовать одну и ту же базу данных для обоих приложений, и sessionID будет доступен для обоих приложений. Единственная проблема, которую я вижу здесь, состоит в том, что объекты в сеансе могут быть недоступны с обеих сторон, так как код будет отличаться и т. Д. Они, вероятно, будут забивать объекты сеанса другой стороны, если вы не поддержите код и тому подобное с обеих сторон, так что объекты были доступны.

Вероятная вероятность: 2) Используйте разные имена файлов cookie для сеанса в одном из двух приложений. По умолчанию сеансы используют JSESSIONID в качестве файла cookie, и когда вы переключаетесь на второе приложение, он пытается найти сеанс на основе этого имени и не может его найти. Таким образом, он создает новый sessionID и отправляет его обратно в браузер, в результате чего ваш sessionID изменяется и становится недоступным при переключении обратно на исходное приложение. Однако, если вы измените sessionID второго приложения на что-то другое (скажем, JSESSIONID2), ваш браузер получит два действительных идентификатора sessionID, каждый из которых будет действителен для их правильного приложения. Вы можете изменить имя через консоль администрирования на странице управления сеансами сервера приложений-> Включить файлы cookie.

0 голосов
/ 26 июня 2009

Вам не нужно делать это вручную. Большинство серверов приложений поддерживают функцию единого входа (SSO), поэтому вы можете войти в одно приложение и получить доступ ко всем приложениям в одном домене SSO. Сервер приложений будет отслеживать идентификаторы сеансов и связывать их с объектом HTTPSession, специфичным для веб-приложения.

См. http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae/csec_sso.html

0 голосов
/ 02 апреля 2009

Я не уверен, поможет ли это, но в ОДНОМ сценарии приложения вы будете отправлять sessionID при каждом ответе, сохранять его в URL, файле cookie или как скрытое поле. Отправляя новый запрос на сервер, также передается sessionID, чтобы разрешить его на стороне сервера. В моем понимании переключение с одного приложения на другое означает, что вы должны предоставить sessionID с пользователем через приложения. Если вы сохраните sessionID в файле cookie, это, возможно, будет невозможно, поскольку файл cookie ограничен определенным доменом сервера. Поэтому убедитесь, что сеанс по-прежнему действителен, а sessionID присутствует после возврата в запущенное приложение.

...