全部!我正在开发一个在iFrame中运行的JAVA / JSF应用程序。客户端在iFrame外部进行身份验证,然后重定向回包含iFrame内部应用程序的页面。如果客户端禁用了第三方cookie,则iFrame将无法访问cookie,并且永远不会看到jsessionid。
我想要做的是在应用程序中测试cookie,如果没有找到,则使用JS重定向到当前页面,并将jsessionid附加到末尾。我用
试过了;jsessionid=#{session.getId()}
哪个好看......但是永远不会保持当前的会话。然后我添加了一个
<h:form><h:commandButton/></h:form>
到页面,关闭cookie,在浏览器中查看页面,并看到表单上列出的jsessionid与session.getId()提供的不同。
我的问题是......我怎样才能得到正确的jsessionid,这是形式的一部分?
谢谢!梅森
- Update-- 我应该提一下,这是在同一个域,网络服务器和应用程序上。 an和同一页面上的#{session.getId()}将同时返回不同的jsessionid。
答案 0 :(得分:0)
会话默认是域绑定和上下文绑定。您的问题表明iframe正在投放的网页在不同的域和/或上下文中运行。
如果iframe中的页面在不同的域中运行,那么您必须编写一个“本地”servlet,在java.net.URLConnection
或Apache HttpClient的帮助下充当代理并让iframe链接到那个。
如果iframe中的页面在相同的域中运行但在不同的上下文中运行(并在同一个Web服务器上运行),则需要将服务器配置为在所有正在运行的Web应用程序之间共享相同的会话。如何做到这一点完全取决于有问题的服务器。如果是Tomcat或克隆/分支,请检查HTTP connector的emptySessionPath
属性。