2009-10-11 135 views
0

我在我的應用程序中有幾個portlet。如果我使用window.open()方法打開一個url,則會話ID會更改並導致其他portlet中發生錯誤。如果我不打開這個網址,一切正常。但是,一旦這個新窗口打開,會話將被清除,其餘的portlet將拋出一個異常,因爲缺少一些值。 在瀏覽器的地址欄中輸入javascript:alert(document.cookie);查看JSESSIONID。它在整個頁面中保持不變,當點擊在新窗口中啓動新網址的鏈接時,它會發生變化。我使用IE8。window.open()清除會話

任何建議,以維持在IE中的會話狀態將不勝感激。

回答

0

你傳遞給window.open()的URL是什麼?讓IE 8在彈出窗口中維護JSESSIONID的簡單方法是在調用portlet標記中的window.open()時使用相對的 URL。關鍵的是,域名保持完全一樣。下面是用window.open()的onclick事件的按鈕的例子:

<button onclick="javascript:window.open('/wps/portal')">Home Page</button> 

我使用WebSphere Portal,所以「/ WPS /門戶」只是鏈接到主頁。

另外,你打算成爲彈出窗口的目標是什麼?不同的門戶頁面具有相同的會話?

更新:鑑於對window.open()的目標是託管在同一域的獨立Web應用程序...

門戶服務器和託管Web應用程序的應用程序服務器具有獨立的會話,但它們都默認使用名爲JSESSIONID的cookie。第一次訪問Web應用程序時,應用程序服務器將覆蓋門戶的cookie,導致對門戶的每個後續請求都會有錯誤的會話標識。當這發生在我身上時,我的解決方案是配置門戶網站以將其會話cookie命名爲其他名稱(例如PORTALSESSIONID),以便兩者不衝突。

+0

感謝您的迴應......我將完整的url作爲參數傳遞給open()方法,但域名與父級完全相同。我會嘗試你的建議。目標不是一個門戶頁面,而是一個不同的Web應用程序託管在同一個域下,例如,如果主域名是example.com,我打開example.com/app/index.jsp – jobinbasani 2009-11-10 04:40:27

+0

我認爲可能存在命名衝突與JSESSIONID cookie。我已經用一些額外的細節更新了這個答案。 – cc1001 2009-11-10 16:23:17