在Tomcat 5.5上禁用续订会话

时间:2012-05-05 15:42:30

标签: java session tomcat tomcat5.5

如何针对特定请求禁用Tomcat 5.5中的重置会话超时?在页面上,我有一个javascript函数,定期向服务器发送ajax调用。在服务器端,我不希望这些调用更新会话生命周期。

谢谢。

2 个答案:

答案 0 :(得分:3)

好的,既然你不喜欢我的第一个想法,我想出了这个JSP演示。 它是一种黑客攻击,但确实有效。测试,复制和粘贴。 浏览到第一个JSP。它将启动会话并设置非活动间隔。 重定向后,请继续按浏览器上的“刷新”按钮。 无论你多少次请求第二个JSP,当前会话都会死掉。

test1.jsp

<%
   session.setMaxInactiveInterval(20); //for easy testing
   response.sendRedirect("test2.jsp");
%>

test2.jsp

<%@ page session="false" import="java.util.*" %>
<%
  HttpSession session = request.getSession(false);
  if(session == null){
                  out.print("Error, No Session!");
                  return;
  }
  long creationTime = session.getCreationTime();
  long now = new Date().getTime();
  long lastAccessedTime = session.getLastAccessedTime();
  int oldInterval = session.getMaxInactiveInterval();
  int inactivePeriod = (int)(now - lastAccessedTime)/1000; 
  session.setMaxInactiveInterval(oldInterval - inactivePeriod); 
  int newInterval = session.getMaxInactiveInterval();
%>
<html>
<body>
session id is <%=session.getId()%>
<br/><%=creationTime%> = creationTime
<br/><%=lastAccessedTime%> = lastAccessedTime
<br/><%=now%> = now
<br/><%=oldInterval%> = oldInterval in seconds 
<br/><%=inactivePeriod%> = inactivePeriod
<br/><%=newInterval%> = newInterval in seconds 
</body>
</html>

答案 1 :(得分:0)

我会创建一个单独的Web应用程序(与您当前的应用程序一起)来接受AJAX调用。 在第二个Web应用程序中,您可以避免创建会话。您可以通过在JSP的页面中使用session =“false”或者不在Servlet中显式创建一个来实现此目的。如果需要在这两个应用程序之间共享数据,则可以在Context定义中使用属性crossContext =“true”。 Tomcat Docs