2012-08-09 82 views
0

我正在開發一個使用JSP的Web項目& JAVA。我必須將會話時間設置爲無限。 僅當用戶的瀏覽器關閉時,會話纔會過期。 我該怎麼辦?關於會話超時值的查詢

我需要你的建議是否將會話時間設置爲無法比較的良好做法。請提供您的意見。

謝謝。

回答

0

您可以通過在你的web.xml

<session-config> 
<session-timeout>30</session-timeout> 
</session-config> 

值是在幾分鐘內添加這些行指定在web.xml文件中的會話超時,而且它是一個非活動期,這意味着它會被刷新每當瀏覽器與服務器交互時。

擁有無限的價值(不知道如果可能),極不推薦。您無法確定瀏覽器何時關閉,最終可能會導致內存不足或存儲大量無用的會話。

相反,你可能會嘗試在你的html或某個ajax請求中進行一些元刷新,以保持會話活着,儘管我不會推薦它。只需在超時時間內輸入高價值。

希望它有幫助。

0

在Servlet規範中沒有指定默認的會話超時,它被排除在容器之外。

對於tomcat它是30mins.One總是可以覆蓋這個值,或者通過DD?

<session-config> 
<session-timeout>600</session-timeout> 
</session-config> 

編程通過HttpSession對象上setMaxInactiveInterval()方法。

如果會話超時設置爲-1,則會話壽命延長至無限遠,即只要容器正在運行。

最後,如果應用程序有會話超時是無限的,你的會話永遠不會過期,所以它不是好主意。

0

你可以在你的jsp中嘗試下面的代碼片段來打一個js函數,它將調用一個ajax函數來訪問服務器端組件。然後只需使用會話API來使會話無效。

window.onbeforeunload = WindowClose; 

function WindowClose() { 

    //Write a AJAx request here to hit the server side servlet of any filter 

} 

或者使用

<body onunload="WindowClose(); > 

在服務器端代碼,使用

HttpSession session = request.getsession(); 
session.setMaxInactiveInterval(0); //or session.invalidate(); 

同樣的建議,這將是很好的做法在web.xml定義默認會話超時值因此,如果瀏覽器崩潰,會話將在規定的時間過後失效。

+0

我使用onBeforeUnload事件有很多問題,具體取決於瀏覽器或命中的操作。(在導航到同一站點內的另一個頁面時可能會調用它)。另外,在瀏覽器崩潰的情況下,JavaScript將不會執行,並且您將在您的服務器中永久保留會話。 – richardtz 2012-08-09 11:48:19

+0

我的回答是除了你的答案。 'code''code'@Pradeep需要一種基於瀏覽器關閉來使會話無效的方法。即當用戶關閉瀏覽器窗口時,他不希望會話在服務器上停留一分鐘。我同意我們應該將web.xml中的默認會話超時配置設置爲安全網絡,並且是一種很好的做法。 – Metalhead 2012-08-09 12:15:42