2011-04-08 97 views
0

我们有一个基于JSF 2.0(MyFaces)构建的应用程序,它运行在Weblogic应用服务器上。我们正面临有关http Session的问题。JSF会话问题在不同的浏览器窗口中

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

注:。豆是session范围和javax.faces.STATE_SAVING_METHODserverstatic变量被共享没有问题。

任何想法为什么会发生这种情况,并有一个解决方案来防止这种情况发生?

Regards, Shaj。

回答

3

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

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

+1

并且没有办法阻止这种情况发生? – nobody 2011-04-08 09:58:01

+0

@nobody,no,因为'JSESSIONID'是Servlet规范的一部分。即使你的会话存储在服务器中。用户会话存储在cookie标识符“JESSIONID”中。这很重要,因为Servlet需要确定哪个用户会话属于哪个Http Session。 – 2011-04-08 10:10:42

+1

@nobody:只是不在请求范围中存储请求范围数据。请将其存储在请求范围中。 – BalusC 2011-04-08 10:44:47

4

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

JSESSIONID是servlet规范用于在会话之间区分的cookie,但是为同一浏览器的所有窗口共享。请致电MyFaces Users and Dev Mailing Lists

相关问题