【发布时间】:2012-03-13 18:48:57
【问题描述】:
有一种情况,我有一个表单,它从我的应用程序中显示为各种事件的动态弹出窗口。我正在填写表格并提交它,这会导致会话过期。
我发现在表单中打印请求标头的值时,我看到 jsession id 丢失或者有时会创建新的 jseesion id。
这种情况并不经常发生。在工作情况下,我不会丢失任何 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>
【问题讨论】:
-
这是一个单独的 servlet 还是应用程序中的一个?
-
没有应用程序的内置 servlet。
-
您必须首先排除这是服务器问题还是客户端问题。要确定它,您需要跟踪 HTTP 流量。在 Chrome/IE9/Firebug 中,您可以按 F12 检查“网络”流量。检查请求/响应标头。如有必要,请尝试不同的浏览器以查看行为是否相同。如果确实是服务器返回了一个新的 JSESSIONID cookie 作为响应,即使客户端已经在请求中发送了正确的 JSESSIONID cookie,那么这是服务器问题,否则是客户端问题。