Обработка сеансов в приложении Java EE

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

Функциональность системы следующим образом,

  1. Получать входные параметры с сайта продавца
  2. Подтвердите это
  3. Аутентификация пользователей (пользователи зарегистрированы в нашей системе, и мы должны вызвать наш экран входа в систему)
  4. Процесс транзакции
  5. Вернуть статус ответа продавцу

После получения ответа клиент должен проверить данные транзакции по значениям, находящимся в сеансе.

Обзор системы может быть изображен следующим образом:

( нажмите здесь для просмотра в полном размере)

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

Как я могу преодолеть эту проблему?

Мы используем 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-файлов между запросами одного и того же веб-приложения. Но второе веб-приложение должно делать то же самое при перенаправлении обратно в первое веб-приложение.

Другие вопросы по тегам