2011-04-08 90 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

相關問題