Обработка сеансов в приложении Java EE
Я разрабатываю систему для обработки финансовых транзакций, полученных клиентскими торговыми системами, и это замена существующей системы, которую мы приобрели у поставщика. Клиентский интерфейс должен вызывать экраны аутентификации пользователя и обработки транзакций из нашей системы.
Функциональность системы следующим образом,
- Получать входные параметры с сайта продавца
- Подтвердите это
- Аутентификация пользователей (пользователи зарегистрированы в нашей системе, и мы должны вызвать наш экран входа в систему)
- Процесс транзакции
- Вернуть статус ответа продавцу
После получения ответа клиент должен проверить данные транзакции по значениям, находящимся в сеансе.
Обзор системы может быть изображен следующим образом:
( нажмите здесь для просмотра в полном размере)
Моя проблема в том, что клиент не может сохранить сеанс после того, как мы отвечаем клиенту. Но та же функциональность может быть достигнута системой, которую мы приобрели у поставщика (у нас нет исходного кода для анализа внутренней структуры кодирования). Я надеюсь, что что-то не так с тем, как мы реагируем на клиента.
Как я могу преодолеть эту проблему?
Мы используем Java 1.4.2, сервер приложений Websphere
1 ответ
Есть много вещей, которые могут заставить сеанс исчезнуть. Я бы посоветовал отследить их и проверить, все ли в порядке. Это легче сделать, если вы понимаете, как работают сессии.
Время сеанса истекло. Обычно по умолчанию это 30 минут. Это настраивается
<session-timeout>
вweb.xml
где вы можете указать время ожидания в минутах. Вы можете реализоватьHttpSessionListener
отслеживать создание и уничтожение сессий с помощью регистратора.Сессия была принудительно признана недействительной. Это происходит, когда код вызывает
HttpSession#invalidate()
, Это отслеживается сHttpSessionListener
также.Файл cookie сеанса исчез. Сессии поддерживаются куки. Если сеанс создан, сервер добавит
Set-Cookie
заголовок с идентификатором сессии. Клиент должен отправить тот же файл cookie обратно, что иCookie
заголовок во всех последующих запросах в (контекстном) пути, как указано вSet-Cookie
заголовок. Это можно отследить в мониторе HTTP-трафика (вкладка "Сеть") встроенного в браузер набора инструментов веб-разработчика (нажмите F12 в Chrome/Firefox23+/IE9+). Файлы cookie доступны для всех веб-приложений в одном домене cookie. Кроме того, еслиServletC2
работает в другом контексте веб-приложения, чемServletC1
тогда он не будет использовать тот же сеанс. Кроме того, если "серверное" веб-приложение работает в том же домене, то теоретически оно способно уничтожить все файлы "клиентского" веб-приложения.Клиент не поддерживает куки. Хорошо разработанное веб-приложение использует перезапись URL с
jsessionid
отслеживать клиентов без cookie-файлов между запросами одного и того же веб-приложения. Но второе веб-приложение должно делать то же самое при перенаправлении обратно в первое веб-приложение.