2009-12-04 45 views
1

不工作我試圖使用HttpSession.setMaxInactiveInterval調整會話超時,它不工作。HttpSession.setMaxInactiveInterval在Tomcat中6

這裏是我的代碼(Groovy中),這是沒有例外執行:

def paramValue = WebAttributes.REQUEST.getParameter('maxInactiveSeconds'); 
println 'paramValue=' + paramValue; 
if (paramValue != null) { 
    def seconds = Integer.parseInt(paramValue); 
    WebAttributes.REQUEST.getSession().setMaxInactiveInterval(seconds); 
} 

一些細節:

  • 的Tomcat 6.0.16
  • 這是在web應用程序發生從分開「正常」一個(即,具有視覺內容),但是我已經定義emptySessionPath =「真」,因此該會話*應該*跨越web應用共享

感謝,

占卜師

回答

1

原來還有一個技術設置maxInactiveInterval回30分鐘,壓倒一切的我試圖去改變它。

的Tomcat,Java等都是按預期工作。

+0

這是什麼技術? – tylerdurden 2018-02-01 07:10:17

3

你怎麼測試呢?每個新請求都會再次推遲超時,你知道嗎?所以F5的請求,直到預期的超時不會幫助。該webcontainer也不會立即破壞會議,所以你不會看到從任何HttpSessionListener立即結果。它會以一定的時間間隔收穫它們,這可能是每分鐘,但也可以是每15分鐘一次。但是,如果在超時後出現新請求,它將立即收穫。

關於你的「會話應該共享」這句話,來驗證這種最好的方式當然是通過檢查會話ID,以編程方式(例如顯示${pageContext.session.id})或只是確定jsessionid cookie的值在你的網頁瀏覽器。

監測實際會話創建和銷燬,實現虛擬HttpSessionListener。這裏有一個基本的例子:

public class MyHttpSessionListener implements HttpSessionListener { 
    public void sessionCreated(HttpSessionEvent event) { 
     System.out.printf("%s session %s created %n", new Date(), event.getSession().getId()); 
    } 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.printf("%s session %s destroyed %n", new Date(), event.getSession().getId()); 
    } 
} 

希望這會有所幫助。

+0

感謝您的周到和知識的答覆。 我在頁面上嵌入了基於JavaScript的會話超時警告消息。它啓動一個持續時間基於HttpSession.getMaxInactiveInterval()的計時器。我的代碼似乎沒有改變這個值 - 我試圖將其設置爲40秒。 (用於自動化測試),但仍然是30分鐘。當頁面租房的時候。 – 2009-12-07 18:00:54