我目前正在努力解决一个奇怪的问题。我有一个在Glassfish 3上运行的基于Java的应用程序。此页面嵌入在具有iFrame的另一个页面上。当我直接从任何浏览器调用页面时,一切正常。当我使用任何版本的Internet Explorer
或Safari
调用嵌入了iFrame的网页时,我会遇到会话问题。
调用的第一个页面有一个SessionScoped
Backing Bean,其中包含一些URL-GET参数(如?id=12&code=1
)附带的信息。检查id
和code
后,Backing Bean会将客户端重定向到另一个页面:
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect(context.getRequestContextPath() + "/a.xhtml?faces-redirect=true");
以下页面有另一个SessionScoped
Backing Bean,访问第一页的Backing Bean。已设置的所有值现在都是NULL
。
我检查了对页面的请求。在Chrome
和Firefox
中,第一个请求的响应包含JSESSIONID
,浏览器会在所有其他调用中使用该响应。 Safari
和Internet Explorer
也在接收JSESSIONID
,但不会将其用于下一个请求,因此服务器会创建一个新请求。
我的web.xml定义了session-config
,如下所示:
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>