2010-05-21 55 views
0

假設我有一個在web.xml中定義了servlet的web應用程序。Servlet會話行爲和Session.invalidate

然後我將它部署在Tomcat上。

然後我打開我的瀏覽器並進入到這個servlet的鏈接,它被調用。

然後關閉我的瀏覽器窗口。

如何會話行爲?它是如何創建的,在這種情況下被破壞?

如果此servlet從所有web應用程序「分離」,並且獲取參數僅使用&得到,所以它根本不需要Session,如果在doGet(),doPost()函數結束時使用Session.invalidate ()?

回答

3

servlet容器通常使用(1)HTTP cookie或(2)在每個URL中添加額外參數jsessionid來跟蹤會話。

當用戶訪問本網站並且沒有會話存在時,會爲他創建一個新的會話,包括相應的HttpSession。如有必要,用戶可能會被重定向到登錄頁面。

Session.invalidate的影響基本上是:「放棄該用戶的當前會話,如果他訪問該站點上的另一個頁面,將會創建一個新的會話」。

到目前爲止,我知道,會話失效通常用於實現註銷功能。

我不會在你的「分離的」servlet中調用Session.invalidate,它會干擾其他頁面。基本上,你不關心你的servlet中的會話,反正你也不使用它。

也許你也可以看看這個問題disabling the session

3

然後關閉我的瀏覽器窗口。 會話如何表現?它是如何創建的,在這種情況下被破壞?

您是否問如果在客戶端接收到響應之前瀏覽器已關閉會發生什麼情況?

在這種情況下,Session仍將在服務器上創建。它會持續一段指定的時間,然後到期。

來自瀏覽器的下一個請求將創建一個新的Session。 查看更多的這裏:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html

關於session.invalidate - ewernli已經回答。

+0

好的,但我不需要1000個會話過了一段時間。我知道我根本不需要它,只要它是在每個請求上創建的,那麼在我的業務邏輯方法完成後手動銷燬它將是完美的。 – EugeneP 2010-05-21 08:29:40

+0

這取決於servlet實際在做什麼。用戶是否不打算繼續在該網站上的任何旅程? 在這種情況下,HttpSession將會非常輕量,小於1Kb,因爲你沒有存儲任何東西。所以對服務器沒有重大影響。 – JoseK 2010-05-21 08:47:44