0

我的应用程序中有几个 portlet。如果我使用 window.open() 方法打开一个 url,会话 ID 会更改并导致其他 portlet 出错。如果我不打开此网址,一切正常。但是一旦打开这个新窗口,会话就会被清除,并且由于缺少某些值,其余的 portlet 会抛出异常。在浏览器的地址栏中,我输入了 javascript:alert(document.cookie); 查看 JSESSIONID。它在整个页面中保持不变,并在我单击在新窗口中启动新 url 的链接时发生变化。我用的是IE8。

任何在 IE 中维护会话状态的建议将不胜感激。

4

1 回答 1

0

您将什么 URL 传递给 window.open()?让 IE 8 在弹出窗口中维护 JSESSIONID 的一种简单方法是在 portlet 标记中对 window.open() 的调用中使用相对URL。关键是域名保持完全相同。这是 onclick 事件中带有 window.open() 的按钮的示例:

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

我正在使用 Websphere Portal,所以“/wps/portal”只是链接到主页。

另外,您打算作为弹出窗口的目标是什么?具有相同会话的不同门户页面?

更新:鉴于 window.open() 的目标是托管在同一域上的独立 Web 应用程序...

门户网站服务器和托管 Web 应用程序的应用程序服务器具有独立的会话,但默认情况下它们都使用名为 JSESSIONID 的 cookie。第一次访问 Web 应用程序时,应用程序服务器会覆盖门户的 cookie,从而导致对门户的每个后续请求都具有错误的会话 ID。当这发生在我身上时,我的解决方案是配置门户以将其会话 cookie 命名为其他名称(例如 PORTALSESSIONID),这样两者就不会发生冲突。

于 2009-11-08T22:26:52.290 回答