2013-03-28 23 views
0

我需要sessionDestroyed方法中的Request對象,因爲我需要在那裏檢索Cookie。如何在sessionDestroyed方法中獲取請求對象?

public void sessionDestroyed(HttpSessionEvent httpSessionEvent) 
{ 
// Here I need to get Request object so that I can retrieve Cookies. 
} 

是否有可能得到request對象,以便我可以檢索餅乾呢?

回答

1

否。當會話被銷燬時,不一定需要HTTP請求。它可以在超時期間被銷燬,因爲客戶端沒有發送任何請求,例如, 30分鐘。例如,當你明確地調用HttpSession#invalidate()時,HTTP請求可用的唯一情況就是如此。按下注銷按鈕。但在您調用該方法的時刻,您已經擁有了一個HTTP請求。然後,您可以在同一時刻完成cookie作業,而不是在會話偵聽器中完成。

對於您錯誤地認爲這將是正確的解決方案的具體功能需求並不清楚,所以我無法給出一個恰當的答案來解決如何正確解決問題。但其中一種方法是將存儲在cookie中的信息作爲會話屬性存儲。如果你需要在每個請求的基礎上這樣做,因爲cookie值可以由客戶端的JS操縱,例如,那麼你可以使用servlet filter這個。

+0

我有2個JSP表單(form1&form2)。渲染這些表單是基於Cookie值決定的。當用戶保持空閒(說)15分鐘時,會話正在被破壞,其他值正在刷新,但Cookie未被清除,無法重定向到正確的表單。而是呈現其他不正確的形式。因此我想''sessionDestroyed'方法清除cookie。 –

+0

只需將其設置爲會話cookie(將'maxAge'設置爲'-1'),以便在會話結束時自動銷燬它。 – BalusC

0

No. No Way。

會話銷燬是可能異步發生並超出請求生命週期範圍的事情。

在請求生命週期的範圍之外,請求對象的引用在您的思想中是不正確的。

相關問題