2010-11-08 108 views
3

我在寫我的SPring MVC Web應用程序。Servlet會話超時

我已將會話時間設置爲10080分鐘,等於1周。 現在我想保持用戶登錄每次他打開的瀏覽器:

sessionService.setcurrentUser(myuser); 
     HttpSession session = request.getSession(); 
     Cookie cookie = new Cookie("JSESSIONID", session.getId()); 
     cookie.setMaxAge(timeout); 
     response.addCookie(cookie); 

如果我的cookie最大年齡是相同的會話超時?

cookie.setMaxAge(10080); 

這是很好的做法嗎?

+0

僅供參考,setMaxAge參數值是以秒爲單位,而會話超時以分鐘爲單位 - 你需要通過60乘以10080得到最終的結果你正在尋找。 – Vladimir 2012-02-19 21:13:37

回答

1

您使用cookie來引用您的會話ID。如果Cookie的超時時間低於會話,則不會再找到您的會話。因此,將您的Cookie超時設置爲至少會話超時是明智的。

+1

這個答案沒有意義。會話的id(JSESSIONID)通過cookie的機制(可通過URL重寫)轉發到servlet容器。因此,從用戶角度來看,如果cookie超時,會話就會消失。如果cookie超時高於會話空閒超時(web.xml/session-config/session-timeout),那麼容器可能會在達到cookie最大時限之前使會話失效。 – whaefelinger 2013-08-24 10:13:13

7

你應該配置它在web.xml,而不是通過黑客默認的會話cookie。

<session-config> 
    <session-timeout>10080</session-timeout> 
</session-config> 

請注意,您不應該在會話中存儲太多數據和/或您的服務器有足夠的內存。

+0

這不起作用。默認情況下(至少在Tomcat上),當瀏覽器關閉時會話無效。發生這種情況是因爲會話cookie的年齡(如果適用)設置爲「0」。 – whaefelinger 2013-08-24 09:57:48

+0

@user我回答了問題,而不是功能要求。你是對的,這個答案不適用。無論如何,我已經多次回答過這樣的問題。 – BalusC 2013-08-24 12:06:24

2

以下帖子包含有趣的信息。
至於很好的做法去,你可能有兩點考慮:

  • 離開會議上活躍了很長一段時間的安全性方面。
  • 內存影響,你的會話將被序列化,你想保持最小。特別是如果用戶數量可能急劇增長。

Discussion 1
Discussion 2
Discussion 3