2014-02-25 37 views
2

我使用的是Glassfish 3,我希望會話永不過期,只要瀏覽器窗口打開。根據this可以在web.xml中調整session-timeout。我可以將它設置爲0並且永不過期。Glassfish中永不過期的會話何時會被銷燬?

但我不安全,這是什麼意思。假定用戶已登錄,幾個小時後他只需關閉瀏覽器窗口。在這種情況下在服務器上的會話發生了什麼?它會成爲一個匿名會議,它仍然存在於記憶中,還是會從Glassfish中被殺死?或者當用戶明確註銷時它會被銷燬?

那麼,Glassfish何時會使一個永不過期的會話失效?

回答

2

正如這個詞已經描述它:從來沒有。

Servlet規範:

根據定義,如果超時期限爲會話設置爲-1,則 會議將永不過期。

您還可以在HttpSession.setMaxInactiveInterval(int val)的文檔中閱讀此內容。

和:

會話配置定義此Web應用程序 會話參數。子元素會話超時爲此Web 應用程序中創建的所有會話定義默認的會話超時間隔 。指定的超時時間必須以整個 分鐘數表示。 如果超時時間爲0或更短,容器將確保 會話的默認行爲永遠不會超時。如果未指定此元素 ,則容器必須設置其默認超時期限。

關於:

假設和一些小時後,他乾脆關閉 瀏覽器窗口中的用戶登錄。在這種情況下, 服務器上的會話發生了什麼?這將是一個匿名會議,它仍然在記憶中, 或將從Glassfish被殺害?或者只有當用戶明確註銷時才銷燬 ?

服務器(在大多數情況下)不知道也不關心瀏覽器窗口是否打開,因此關閉瀏覽器窗口不會改變會話狀態的任何內容。該會話將保留在Glassfish的內存中,直到應用程序被取消/重新部署或應用程序服務器關閉。

參見:

+0

謝謝您的回答。我讀過另一個線程。但我只是想知道爲什麼有人應該使用永不過期的會話,而只是簡單地加載內存?但是,也許我並不完全瞭解會議的工作方式。假設有人關閉他的電腦,並在一天後回到現場。會話將從內存中恢復還是新實例化?它僅僅是用cookie來識別?我想,我必須詳細瞭解會議的工作方式。 – Reitffunk

+0

是的會話是用cookie標識的。但是大多數Web應用程序使用所謂的會話cookie,當瀏覽器關閉時,這個cookie會被刪除。如果您重新打開瀏覽器並訪問您的Web應用程序,則會創建一個新會話並獲得一個新Cookie,但舊會話也會保存在服務器的內存中。 – unwichtich