JSF Session问题在不同的浏览器窗口中

时间:2011-04-08 09:43:52

标签: java session jsf myfaces

我们有一个基于JSF 2.0(MyFaces)的应用程序,可以在Weblogic应用服务器上运行。我们正面临关于http Session的问题。

问题:假设我已经在两个不同的IE窗口中打开了应用程序,并在第一个窗口中提供了一些搜索输入。在第一个窗口中接收的搜索结果数据正在第二个窗口的会话中共享。

注意:。 bean的范围为sessionjavax.faces.STATE_SAVING_METHODserver。 <{1}}变量共享没有问题。

知道为什么会发生这种情况,以及防止这种情况发生的解决方案吗?

此致 Shaj。

2 个答案:

答案 0 :(得分:4)

预计会暴露这种行为。如果您需要“窗口”范围,请查看MyFaces CODI Wiki @WindowScoped。其他选择是使用MyFaces Orchestra并使用不同的对话上下文。

JSESSIONID是servlet规范用于在会话之间进行区分的cookie,但是对于同一浏览器的所有窗口都是共享的。

有关详细信息,请参阅MyFaces Users and Dev Mailing Lists

答案 1 :(得分:3)

这是因为IE将会话ID JSESSIONID保存在cookie中。该cookie存在于相同的IE“空间”中。您将意识到,如果您使用IE和Firefox,则不会共享会话cookie。

JSESSIONID本质上是您的Web容器用于会话跟踪的标识符。如果浏览器不支持cookie,则会在URL上附加ID。在您的情况下,您将JESSIONID存储在cookie中,并且您的所有多个窗口都可以看到相同的会话cookie。