2012-02-23 75 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