以下是我的代码。
在此, 会话超时立即,因为我们说, “0秒不活动后超时”。
因此 session.getAttribute(“foo”)必须提供异常。但代码可以毫无故障地工作,就好像会话根本没有超时一样。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute(“foo”, “42”);
session.setMaxInactiveInterval(0);
String foo = (String) session.getAttribute(“foo”);
if (session.isNew()) {
out.println(“This is a new session.”);
} else {
out.println(“Welcome back!”);
}
out.println(“Foo: “ + foo);
}
当我使用 getMaxInactiveInterval()时,问题类似。
当我第一次明确调用 setMaxInactiveInterval()时,它会给出正确的结果。但是当它没有以编程方式设置时, getMaxInactiveInterval 不显示默认会话超时,即30分钟。相反,它总是给出 60秒作为结果。
我的服务器是Apache Tomcat 7。 谢谢你的帮助
答案 0 :(得分:2)
Tomcat使用后台线程过期会话。默认情况下,该线程仅每分钟检查一次到期的会话。
如果getMaxInactiveInterval()
未返回默认值1800(30分钟),那么某处某处已更改默认值。
答案 1 :(得分:1)
session.setMaxInactiveInterval(0);
按文档
指定servlet容器使此会话失效之前的客户端请求之间的时间(以秒为单位)。 间隔值为零或更小表示会话永远不会超时。 参数: interval - 指定秒数的整数
所以,如果你把它归零,它就永远不会超时。如果你试试
session.setMaxInactiveInterval(10);
它将在10秒后过期。请注意,web.xml中还有一个值,表示以分钟为单位的超时,以及以编程方式设置的值,即以秒为单位的间隔。