Как я могу вручную загрузить сеанс Java, используя JSESSIONID?
У меня есть сервлет, который обрабатывает многочастную форму. Сообщение фактически создается компонентом загрузки файлов Flash, встроенным в страницу. В некоторых браузерах POST-сгенерированный Flash-файл не содержит JSESSIONID, что делает невозможным загрузку определенной информации из сеанса во время публикации.
Компонент флэш-загрузки содержит информацию о cookie и сеансе в специальном поле формы. Используя это поле формы, я могу получить значение JSESSIONID. Проблема в том, что я не знаю, как использовать это значение JSESSIONID для ручной загрузки этого конкретного сеанса.
Редактировать - Основываясь на решении ChssPly76, я создал следующееHttpSessionListener реализация:
@Override
public void sessionCreated(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.setAttribute(session.getId(), session);
}
@Override
public void sessionDestroyed(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.removeAttribute(session.getId());
}
Который добавляет все сеансы кServletContext в качестве атрибутов, сопоставленных их уникальными идентификаторами. Вместо этого я мог бы поместить карту сессий в контекст, но это кажется излишним. Пожалуйста, оставьте любые мысли по этому решению. Затем я добавляю следующий метод в свой сервлет для разрешения сеанса по идентификатору:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}