2010-09-11 172 views
7

我設置了會話超時。關閉瀏覽器會話丟失

<session-config> 
<session-timeout>11520</session-timeout> 

</session-config>

,當我通過調用這個servlet再關閉瀏覽器並打開它每一次,我看到新的會話創建。每次瀏覽器重新打開時,都可以從HttpSessionListener中執行的SessionCreated方法中看到。

我是tomcat/Java中的新成員,但是如果我在ASP.NET環境中工作,那麼我會解決它的問題,即將Cookie設置爲與會話名稱相同的名稱。

在Tomcat中解決它的最佳做法是什麼?

謝謝你提前。

Danny。

回答

9

每當我關閉瀏覽器並通過調用servlet再次打開它時,就會看到新會話已創建。

這符合指定的行爲。會話cookie沒有年齡,所以只要客戶端打開了webbrowser實例,或者直到客戶端沒有訪問網站長達服務器端的session-timeout設置中指定的時間,它就會一直存在。

你基本上想要一個比會話cookie壽命更長的cookie。您可以使用Cookie API創建新的長生命cookie,使用Cookie#setMaxAge()設置其年齡,使用HttpServletResponse#addCookie()將其添加到HTTP響應中。在隨後的HTTP請求中,您可以使用HttpServletRequest#getCookies()來確定cookie的存在。

這是非Tomcat的具體方式。您可以在其他servletcontainer上執行相同的操作。

+0

感謝您反應快。我可以在web.xml中或者在HttpSesisonListener sesison創建的方法中設置最大cookie時間嗎? – 2010-09-12 11:05:47

+0

在'Filter'中做。你有'HttpServletReponse'到你的手中。你可以通過'HttpSession#isNew()'來檢查會話是否是新的。 – BalusC 2010-09-12 13:09:51

9

我發現,in a similar question,這是現在的Servlet 3.0支持:

<session-config> 
    <session-timeout>11520</session-timeout> 
    <cookie-config> 
    <max-age>11520</max-age> 
    </cookie-config> 
</session-config> 

(有點晚,但我希望這可以成爲有用的人別人太)

+1

正是我在找的!這是最好的答案。 – Dmitry 2014-12-03 07:32:01

+0

謝謝你,你救了我:) – Oneiros 2015-11-06 15:19:29

+0

謝謝你的好建議 – 2017-05-30 05:13:37