2012-02-23 43 views
0

會話已過期我有一個表單,該表單從我的應用程序中顯示爲動態彈出的各種事件。我正在填寫表格並提交,導致會話過期。表單提交已過期

我發現,當打印表單中的請求標頭的值時,我發現jsession標識缺失或有時會創建新的jseesion標識。

這不是經常發生。在工作案例中,我不會錯過任何jsession id或獲取不同的jseesion id。

有什麼建議嗎?

以下是代碼示例。

<HTML> 
<HEAD> 
    </HEAD> 
    <% 
    Enumeration<String> headerNames = request.getHeaderNames(); 
while (headerNames.hasMoreElements()) 
{ 
    String headerName = headerNames.nextElement(); 
    String headerValue = request.getHeader(headerName); 
    System.out.println("Header Name " +headerName); 
    System.out.println("headerValue " +headerValue); 
} 
%> 
<body> 
Comments </br> 
<form name = 'savefrm' action ='save.jsp'> 
<textarea name = 'comments' id = 'text' cols=38 rows=8>"+comments.trim()+"</textarea> 
<input type="submit" value="ok"/> 
</form> 
</body> 
</html> 
+0

這是一個單獨的servlet或一個應用程序中的? – Virtual 2012-02-23 11:12:49

+0

沒有它的內置servlet的應用程序。 – tpsharish 2012-02-23 11:28:12

+0

如果這是服務器或客戶端問題,您首先要排除。要確定它,你需要跟蹤HTTP流量。在Chrome/IE9/Firebug中,您可以按F12查看「網絡」流量。檢查請求/響應標頭。如果有必要嘗試不同的瀏覽器來查看行爲是否相同。如果它的確是服務器返回一個新的JSESSIONID cookie作爲響應,即使客戶端已經在請求中發送了正確的JSESSIONID cookie,那麼這是一個服務器問題,否則就是客戶端問題。 – BalusC 2012-02-23 13:45:11

回答

1

你應該像這樣通過的web.config設置會話超時:

<configuration> 
    <system.web> 
    <sessionState timeout="100000"></sessionState> 
    </system.web> 
</configuration> 

1000毫秒=1秒

+0

我們已經將它設置爲session.setMaxInactiveInterval(-1); – tpsharish 2012-02-23 11:31:35

+0

會話閒置時不會發生這種情況。 – tpsharish 2012-02-23 11:32:12

+0

對不起.Net環境。對於Servlets,你應該嘗試我的第二個答案。 – Hatem 2012-02-23 11:34:16

1

在web.xml文件:

<web-app> 
    <session-config> 
     <session-timeout>20</session-timeout> 
    </session-config> 
</web-app> 

20 = 20分鐘

或你能做到這裏面的代碼:

HttpSession session = request.getSession(); 
session.setMaxInactiveInterval(20*60); 

20 * 60 =20分鐘

+0

當會話空閒並且我們將其設置爲session.setMaxInactiveInterval(-1)時,不會發生這種情況; – tpsharish 2012-02-23 11:34:32

+0

爲什麼你將它設置爲-1?這一步將會終止會話。你正在做的是你試圖將超時改爲-1。因爲你的會話立即死亡。 – Hatem 2012-02-23 11:39:34

+0

否-1表示無窮大。會話超時設置爲有效。 – tpsharish 2012-02-23 11:50:41