Как я могу вручную загрузить сессию Java с помощью JSESSIONID?

Ваш запрос подразумевает, что в ваших данных есть 3-е поле (имя пользователя). Если вы хотите найти «самую старую» запись для имени пользователя, я бы рассмотрел использование подзапроса с именем пользователя «GROUP BY» и агрегатной функции MAX для даты и времени, а затем вы можете присоединить значения подзапроса обратно в свой начальный запрос.

29
задан Eyal 14 March 2013 в 12:29
поделиться

3 ответа

API для получения сеанса по идентификатору не существует.

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

24
ответ дан 28 November 2019 в 02:03
поделиться

Это действительно хороший пост. Одна потенциальная проблема, с которой я сталкиваюсь при использовании прослушивателя сеансов для продолжения добавления сеансов в контекст, заключается в том, что он может стать достаточно толстым в зависимости от количества одновременных сеансов, которые у вас есть. А затем вся дополнительная работа по настройке веб-сервера для слушателя.

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

На странице SWF:

application.setAttribute(session.getId(), session);

Затем на странице загрузки:

String sessid = request.getAttribute("JSESSIONID");
HttpSession sess = application.getAttribute(sessid) == null ?
        request.getSession() :
        (HttpSession)application.getAttribute(sessid);
application.removeAttribute(sessid);

Очень хорошее решение, ребята. Спасибо за это.

0
ответ дан Garfield 28 November 2019 в 02:03
поделиться

В спецификации сервлета нет способа, но вы можете попробовать:

  • вручную установить cookie в запросе, сделанном Flash

  • , или сделать, как только что предложил Тейлор L, когда я вводил и добавлял параметр jsessionid путь к URI.

Оба метода привяжут ваше приложение к работе в контейнере сервлетов, который ведет себя как Tomcat; Я думаю, что большинство из них знают. Оба также потребуют, чтобы ваш Flash-апплет запрашивал у страницы файлы cookie,

1
ответ дан 28 November 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: