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