Идентификатор сеанса HttpSession отличается от идентификатора FlexSession - PullRequest
3 голосов
/ 17 ноября 2010

У меня есть приложение Flex, которое подается через страницу JSP.На этой странице я вывожу идентификатор сеанса, используя HttpSession при загрузке страницы:

System.out.println("Session ID: " + session.getId());

В очень простом удаленном объекте, размещенном в BlazeDS (вызывается из приложения flex с использованием канала AMF и стандартной функциональности RemoteObject). Iтакже выведите идентификатор сеанса, но на этот раз с помощью FlexSession (который, как я понимаю, должен охватывать HttpSession).

System.out.println("FlexSession ID: " + FlexContext.getFlexSession().getId());

Я бы ожидал, что оба идентификатора будут одинаковыми, но это не так.Идентификаторы сеансов различаются, что вызывает проблемы, поскольку в HttpSession хранятся данные, к которым я должен иметь доступ из своих удаленных объектов в BlazeDS.

Я исчерпал материал для чтения в BlazeDS и FlexClient / FlexSession/ FlexContext, но не могу понять, почему FlexSession не связан с HttpSession.Любые указатели очень ценятся.

Я чувствую, что, должно быть, здесь что-то упущено, я захожу на

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

Я не думаю, что это связано с FlashPlayer ... больше связано с концепцией FlexSession и тем, как работает BlazeDS / LCDS. Например, вы можете иметь активный сеанс, даже если не используете каналы http - при использовании NIO / RTMP вы обходите сервер приложений и протокол http. Поэтому имеет смысл иметь абстрактный класс FlexSession с различными реализациями.

Однако при использовании BlazeDS FlexSession внутренне обернет объект HttpSession, а removeAttribute / getAttribute / setAttribute фактически вызывает те же методы из объекта HttpSession, поэтому вы можете получить доступ ко всем данным из HttpSession. Если нет, пожалуйста, предоставьте более подробную информацию.

Тем не менее, он не будет работать при использовании каналов RTMP (который, кстати, существует только в LCDS), в этом случае вам необходимо изменить дизайн.

2 голосов
/ 23 ноября 2010

Благодаря обоим ответам, приведенным выше, я наконец нашел причину и решил поделиться ею здесь.

Причиной различий в идентификаторах сеансов было использование SSL для аутентификации и использования канала AMF, а не безопасного AMF. При первом использовании канала был создан новый сеанс (отсюда и другой идентификатор), поскольку существующий сеанс имел отношение к защищенной версии сайта.

Глупая ошибка конфигурации, но ее стоит передать - убедитесь, что при использовании SSL вы также используете Secure AMF для подключения к защищенной конечной точке, а не со стандартной AMF, или вы столкнетесь с теми же проблемами ID сеанса, с которыми я столкнулся.

1 голос
/ 17 ноября 2010

К сожалению, именно так работает Flash Player.Я видел такое же поведение много раз.

Лучшее решение, которое я нашел, было установить сеанс HTTP и вернуть идентификатор сеанса.На стороне клиента вы можете затем передать идентификатор сеанса в приложение Flex.Затем вы отправляете этот идентификатор из Flash на сервер и используете его для поиска существующего сеанса или установки второго сеанса.

Вам нужно будет сделать что-то подобное, хотя я не смог найти способнадежно заставить Flash использовать тот же сеанс.

...