我的应用程序中有几个portlet。如果我使用window.open()方法打开一个URL,会话ID会更改并导致其他portlet出错。如果我不打开这个网址,一切正常。但是一旦打开这个新窗口,会话就会被清除,其余的portlet会抛出异常,因为缺少某些值。 在浏览器的地址栏中我输入了javascript:alert(document.cookie);看到JSESSIONID。它在整个页面中保持不变,并在单击在新窗口中启动新URL的链接时发生更改。我使用的是IE8。
非常感谢在IE中维护会话状态的任何建议。
答案 0 :(得分:0)
你传递给window.open()的URL是什么?让IE 8在弹出窗口中维护JSESSIONID的一种简单方法是在portlet标记中调用window.open()时使用 relative 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),这样两者就不会发生冲突。