我在我的机器上的两个不同端口上启动了两个不同的JBoss AS 7.1实例,并将相同的应用程序(具有相同的根上下文)部署到它们两者。当我使用相同的浏览器(Chrome 或 Firefox 或 Conkeror)进行选项卡式浏览时,此配置确定性地给了我以下异常:
javax.servlet.ServletException: viewId:/whatever.xhtml - View /whatever.xhtml could not be restored.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
当我使用不同的浏览器浏览时,一切正常。
在进一步调查不同浏览器如何存储 cookie 后,我发现组合(IP /路径)必须是唯一的,以避免此类选项卡式浏览问题,并且端口不会发挥作用。即 cookie 按IP和按路径存储,但不是按端口存储。因此,在部署在相同 IP 和路径(但显然在不同端口上)的两个不同应用程序上使用相同浏览器进行选项卡式浏览将导致视图过期,因为浏览器会混淆两个会话。我认识到我的设置不太可能出现在生产环境中,但我想问一下:
有没有定义这种 cookie 组织行为的标准?
在多个 JSF 应用程序中进行选项卡式浏览时,是否有任何最佳实践必须注意以避免会话混淆?
是否
javax.faces.STATE_SAVING_METHOD
对此有任何影响(在我的设置中设置为"server"
)?