2010-11-17 2 views
3

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

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

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

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

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

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

Я чувствую, что должно быть что-то отсутствует fundemental здесь, я получить доступ к

ответ

2

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

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

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

+0

Спасибо, что вернулись с этим ответом. Я скоро добавлю SSL к нашим вызовам AMF, и это, вероятно, спасло меня несколько часов. –

1

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

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

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

3

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

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

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

Смежные вопросы