如何在 Tomcat 5.5 中针对特定请求禁用重置会话超时?在一个页面上,我有一个 javascript 函数,它定期向服务器发送 ajax 调用。在服务器端,我不希望这些调用更新会话生命周期。
谢谢你。
好的,既然你不喜欢我的第一个想法,我想出了这个 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>
我会创建一个单独的网络应用程序(与您现在的应用程序一起)来接受 AJAX 调用。在第二个 Web 应用程序中,您可以避免创建会话。您可以通过在 JSP 的页面指令中使用 session="false" 或在 Servlet 中不显式创建指令来做到这一点。如果您需要在这两个应用程序之间共享数据,则可以在上下文定义中使用属性 crossContext="true"。 Tomcat 文档