我支持一些项目,使用ADF (using JDeveloper 11.1.2.2.0)
并部署到Tomcat 7.0.28.
在登录之前和之后,IT 存在问题JSessionID:
应该有所不同。为了解决这个问题,在我的方法validate()
中(在用户提交登录表单时执行)我执行以下操作:
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession)ec.getSession(false);
session.invalidate();
session = (HttpSession)ec.getSession(true);
//setting some special session attributes
ec.redirect("nextPage");
当我到达时,nextPage
我可以获得具有上面设置的特殊属性的会话并走得更远。当我从 Firefox 或 Chrome 登录时,一切正常。
但是,当我使用 IE 8.0 登录并重定向到 时nextPage
,我的代码会在没有这些特殊属性的情况下获取会话并将我返回到登录页面。
使用 Wireshark 我意识到,当 Firefox 登录时,它会发送带有用户输入(用户名/密码)的 POST 请求,使用 new 接收答案,使用 newJSessionID in SetCookie parameter
发送另一个请求Adf-Window-id
并接收答案,然后将其重定向到nextPage
.
但是对于 IE 流程是不同的:登录时 IE 发送two POST request in a row
(first with user input, second with Adf-Window-id)
,然后收到两个答案,每个答案都有不同的JSessionID
. 它存储最后一个并被重定向到nextPage
. 显然,最后一个 JSessionID 不属于我设置特殊属性的会话。
我已经花了几天时间试图通过挖掘配置和谷歌来解决这个问题,但没有成功。我所看到的 - IE 有时可以按预期登录(在这种情况下,上面提到的两个答案是以相反的顺序收到的),但它很少发生。
也许您遇到过同样的问题并解决了?或者,也许我做错了/期待错了?