2017-05-29 99 views
0

IWS是一個桌面應用程序,擁有自己的webBrowser組件,可在需要時調用腳本web-app。腳本位於Tomcat6中。'陷害'tomcat6丟失會話

腳本基本上是一個JSP應用程序。 (真的,它是一個引擎,它通過其圖形界面上的人爲操作構建JSP應用程序,如定義流,按鈕,內容等,但我正在討論它作爲JSP生成的「腳本」)

I需要破解腳本,以便它可以在IWS應用程序的webBrowser組件中共享空間(通過框架)。

的IWS呼叫2次start.jsp:

  • 第一次,在一個隱蔽的方式(可能是從IWS代碼直接HTTP查詢),沒有任何特殊的參數。原始的start.jsp做2 302(所以調用訪問總共3頁)它使用jsesionId在cookie中和作爲參數結束(但不在最後302)

  • 第二次,使用jSessionId和a一堆重要的參數。它只使用jSessionId作爲參數。至於我的小提琴手所看到的,當它正常工作作爲JSESSIONID是內部自身的

所以我想在第一時間它只是得到一個新的JSESSIONID不使用的cookie。

我現在所嘗試的解決方案是用一個新的框架頁面替換腳本開始頁面,在新框架頁面中,它在其中一個框架中加載網絡應用程序,並在另一個框架中加載另一個應用程序。根據來自第一幀的數據,它將更新第二幀。

因此,像到:

  • 我們已經start.jsp ...(實際上它被稱爲不同的東西)

  • ,我們結尾:

    • 啓動.app.jsp(原來的start.jsp,剛更名)

    • start.jsp (是包裝了以前start.jsp新的包括HTML)

新start.jsp使用本身的網址,改變start.jsp到start.app.jsp,調用真正的腳本應用程序內的iframe。

但我一直患有像會話問題。我不是tomcat的專家。我瞭解到它使用cookie或參數來控制會話。我認爲它被配置爲使用URL sessionId,但我不確定。我已經將META-INF/settings.xml設置爲在會話中禁用cookie,但它仍然在cookie列表中顯示cookie。

我的問題是,在第二次調用start.jsp時,它顯示的比使用「舊cookie」時的某個想法忽略來自URL的jsessionId。WWG00000E上出現一些奇怪的錯誤:WWGAIL - 錯誤:功能getInteractionKVPair沒有提供ID。詳細信息:

這就好像它正在用另一個jsessionid返回一箇舊的cookie。每次出現錯誤時,「舊」jsessionid都是一樣的。

用提琴手嗅探,我看到第二個start.jsp從URL中正確的jsessionId開始,但它的cookie類似於另一個會話,並且它停止在每次重定向後添加jsession id,因爲發生這種情況。它就像它在一個完全不同的宇宙中執行一樣。這是正常的嗎?

目前我試圖無效地強制cookie jSessionId和鏈接,所以他們包括jSessionId。

請問,你有什麼想法嗎?

謝謝!

Edited2:如果我把它放在沒有框架(恢復默認的start.jsp)。在IWS只能在第一時間(交互),而在隨後的任何一個問題開始出現......

回答

1

好了,終於解決了......

至少與此版本的Tomcat:

  • 對沒有jSessionId的jsp的調用會在您的應用程序cookie中創建一個新的jSessionId。
  • 任何進一步的及時html請求將使用cookie jSessionId而不是URL上的一個,所以你失去了任何類型的多會話支持。

這是比webBrowser組件特殊的東西,做兩步連接,第一個請求從來沒有關聯的cookie,所以它工作正常,給你一個新的jSessionId的cookie,然後你可以做一個新的,無Cookie的第二個請求,它使用URL的jSessionId並且沒有cookie或沒有jSessionId的「默認」cookie。如果這個web瀏覽器在它的URL中請求一個沒有jSessionId的jsp頁面,那麼問題就開始了,所以如果第一個請求包含一個非jSessionIded調用,那麼Tomcat會給你一個jSessionId,它被設置在你的「默認應用cookie」上,所以第二個請求會忽略任何使用該cookie的URL的jSessionId。

在網絡瀏覽器中,我發現至少在Firefox中,清除cookie不足以消除這個「默認cookie」。但也許它可能是經典的「它需要太長時間,所以你認爲它很乾淨,但實際上並非如此」。不確定。

我知道這聽起來很混亂。我沒有時間對此做進一步的測試。

就我所知,它就像是,當它工作正常時,它像一個「會話cookie」(沒有jSessionId),而當它不工作時,它需要「默認cookie」(與jSessionId)並開始忽略URL jSessionId。

我發送了一封電子郵件給Tomcat的dev郵件列表。 (其中一個表示正確的地方是用戶郵件列表......但在這裏你是;-))