2012-10-22 30 views
2

我是JSF的新手,我正在做一些關於Scopes和Http會話生命週期的研究,但有一點我不清楚。頁面刷新時HttpSession失效

我知道可以使用來自ExternalContext的sessionMap存儲變量,並且它用於爲我所需要的工作非常好。我也知道,當會話失效時,地圖上存儲的所有數據都將丟失。

但是,我不知道的是:當頁面刷新時,會話失效?

當我不得不從我的web應用程序的某個按鈕上下載請求時,出現了我的問題。顯然,下載請求無法通過Ajax進行,因此整個頁面都必須刷新。下載過程正常進行,但在此之後,地圖上存儲的所有數據都消失了,包括所有託管的bean。用戶數據本身並不重要,因爲我可以存儲它,然後再將它放在新的會話圖上。但是託管的bean呢?我應該如何繼續?

+1

*當頁面刷新時會話失效* - 這不是正常行爲。請跟蹤HTTP流量並判斷是否忘記發送會話cookie的瀏覽器,或者是否返回新會話cookie的服務器。這樣我們就可以確定誰有錯:客戶端或服務器。 – BalusC

+0

@BalusC首先,感謝您的回答。那麼,我並不完全確定會話是否失效,但是如果sessionMap丟失並且創建了新的會話,我想我可以肯定,對吧? 關於你的建議,會介意給我一個關於我會怎麼做的暗示?我的意思是,跟蹤餅乾和一切? – Tinadm

+1

在Chrome/IE9/Firebug中按F12並檢查*網絡*選項卡。要了解基本會話概念如何工作,請前往此答案http://stackoverflow.com/a/3106909 – BalusC

回答

2

假設它不是網頁瀏覽器不守規矩的人,只有在服務器端代碼實際上是通過調用ExternalContext#invalidateSession()HttpSession#invalidate()使會話失效時纔會發生這種情況。

如果你不能確定它,那麼創建一個HttpSessionListener並在sessionDestroyed()方法上設置一個調試斷點,並調查啓動它的調用棧以及爲什麼。