2010-11-17 87 views
3

我有一個通過JSP頁面提供的Flex應用程序。在該頁面I輸出會話ID使用的HttpSession當頁面被加載:HttpSession會話ID與FlexSession ID不同

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

在BlazeDS的(從使用AMF通道和標準的RemoteObject功能柔性應用調用)承載的非常簡單的遠程對象我還輸出會話ID,但這次使用FlexSession(據我所知應該是繞過HttpSession)。

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

我希望兩個ID都是相同的,但事實並非如此。會話ID不同,導致問題,因爲有數據存儲在HttpSession中,我需要從BlazeDS中的遠程對象訪問數據。

我已經用盡了BlazeDS和FlexClient/FlexSession/FlexContext上的閱讀材料,但看不到爲什麼FlexSession沒有鏈接到HttpSession。任何指針不勝感激。

我覺得我必須在這裏失去了一些東西fundemental,我在訪問

回答

2

感謝上述兩個答案,我終於找到了根源,並認爲我會在這裏分享它。

會話ID不同的原因是使用SSL進行身份驗證以及使用AMF Channel而不是Secure AMF。第一次使用該通道導致創建新的會話(因此是不同的ID)作爲與該站點的安全版本相關的現有會話。

愚蠢的配置錯誤,但值得傳遞 - 確保如果使用SSL,您也正在使用Secure AMF連接到安全端點而不是標準AMF,否則會遇到同樣的會話ID問題。

+0

感謝您回來這個答案。我很快就會將SSL添加到我們的AMF調用中,這可能會爲我節省幾個小時。 – 2012-03-21 08:38:51

1

可惜這是Flash播放器是如何工作的。我多次看到過這種相同的行爲。

我發現的最佳解決方案是建立HTTP會話並傳回會話ID。在客戶端,您可以將會話ID傳遞給Flex應用程序。然後,您將該ID從Flash發送到服務器,並使用它查找現有會話或建立第二個會話。

雖然你需要做這樣的事情,但我一直無法找到一種可靠的方式讓Flash使用同一個會話。

3

我不認爲它與FlashPlayer有關......更多地與FlexSession的概念以及BlazeDS/LCDS的工作原理有關。例如,即使不使用http通道,也可以進行活動會話 - 使用NIO/RTMP時,您將繞過應用程序服務器和http協議。因此,具有各種實現的抽象類FlexSession是有意義的。

但是使用BlazeDS的FlexSession時將在內部包裝一個HttpSession對象,和的removeAttribute /的getAttribute /的setAttribute實際上調用從HttpSession中同樣的方法object..so可以從HttpSession的訪問所有數據。如果不是,請提供更多細節。

但是,在使用RTMP通道時(它只存在於LCDS中)不起作用,在這種情況下需要更改設計。