2009-11-26 58 views
1

我有一個實現了HttpSessionAttributeListener的對象,正如你所期望的那樣,當某些對象被添加,替換並從會話中移除時,它會做一些工作。attribute在session.invalidate後沒有被調用

我認爲如果會話結束[session.invalidate()],該會話中的每個對象都從會話中刪除,因此將調用attributeRemoved()方法?我沒有看到那種行爲,並想知道我是否夢想。

爲了確保在會話失效時可以通知我,我是否必須對我感興趣的對象實施HttpSessionBindingListener?或者有另一種方式。

回答

1

當您致電session.invalidate()時,您只是通知容器應該不再使用該會話。然而,它並不需要做其他任何事情,例如刪除會話屬性。它最終會這樣做,但不能保證它會立即執行,並且您的應用程序不應該依賴它及時發生。

+0

謝謝,你知道如果session.invalidate()會導致容器通知會話對象(即實現了HttpSessionBindingListener),他們現在綁定? – scottyab

+0

它應該在它們取消綁定時通知他們,但會話失效後隨時可能發生,並且沒有時間保證。 – skaffman

0

HttpSessionListener,實施方法sessionDestroyed

+0

當sessionDestroyed你不能得到任何對象的會話,如果你嘗試我認爲你會得到sessionInvlaidException(或類似的例外) – scottyab

+0

嗯,我沒有嘗試過,但看看Tomcat的代碼,它似乎那個聽衆在會話失效之前被調用,並且attibutes被移除。 – Bozho

相關問題