我正在開發一個使用JSP的Web項目& JAVA。我必須將會話時間設置爲無限。 僅當用戶的瀏覽器關閉時,會話纔會過期。 我該怎麼辦?關於會話超時值的查詢
我需要你的建議是否將會話時間設置爲無法比較的良好做法。請提供您的意見。
謝謝。
我正在開發一個使用JSP的Web項目& JAVA。我必須將會話時間設置爲無限。 僅當用戶的瀏覽器關閉時,會話纔會過期。 我該怎麼辦?關於會話超時值的查詢
我需要你的建議是否將會話時間設置爲無法比較的良好做法。請提供您的意見。
謝謝。
您可以通過在你的web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
值是在幾分鐘內添加這些行指定在web.xml文件中的會話超時,而且它是一個非活動期,這意味着它會被刷新每當瀏覽器與服務器交互時。
擁有無限的價值(不知道如果可能),極不推薦。您無法確定瀏覽器何時關閉,最終可能會導致內存不足或存儲大量無用的會話。
相反,你可能會嘗試在你的html或某個ajax請求中進行一些元刷新,以保持會話活着,儘管我不會推薦它。只需在超時時間內輸入高價值。
希望它有幫助。
在Servlet規範中沒有指定默認的會話超時,它被排除在容器之外。
對於tomcat它是30mins.One總是可以覆蓋這個值,或者通過DD?
<session-config>
<session-timeout>600</session-timeout>
</session-config>
或
編程通過HttpSession對象上setMaxInactiveInterval()
方法。
如果會話超時設置爲-1,則會話壽命延長至無限遠,即只要容器正在運行。
最後,如果應用程序有會話超時是無限的,你的會話永遠不會過期,所以它不是好主意。
你可以在你的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定義默認會話超時值因此,如果瀏覽器崩潰,會話將在規定的時間過後失效。
我使用onBeforeUnload事件有很多問題,具體取決於瀏覽器或命中的操作。(在導航到同一站點內的另一個頁面時可能會調用它)。另外,在瀏覽器崩潰的情況下,JavaScript將不會執行,並且您將在您的服務器中永久保留會話。 – richardtz 2012-08-09 11:48:19
我的回答是除了你的答案。 'code'
'code'@Pradeep需要一種基於瀏覽器關閉來使會話無效的方法。即當用戶關閉瀏覽器窗口時,他不希望會話在服務器上停留一分鐘。我同意我們應該將web.xml中的默認會話超時配置設置爲安全網絡,並且是一種很好的做法。 – Metalhead 2012-08-09 12:15:42