Java 会话超时时回调
这个问题可以通过谷歌来解决,我也是,但由于我对servlet技术不熟悉,所以无法解决这个问题 我需要将会话分配给特定的用户,会话将在10秒内过期,当会话过期时,用户将再次转发到login.html页面 我读了一些关于它的文章,但是当会话到期时,我没有收到回调。 这是我的尝试Java 会话超时时回调,java,session,servlets,Java,Session,Servlets,这个问题可以通过谷歌来解决,我也是,但由于我对servlet技术不熟悉,所以无法解决这个问题 我需要将会话分配给特定的用户,会话将在10秒内过期,当会话过期时,用户将再次转发到login.html页面 我读了一些关于它的文章,但是当会话到期时,我没有收到回调。 这是我的尝试 Login servlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletE
Login servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("user_id");
String pwd = request.getParameter("pwd");
PrintWriter out = response.getWriter();
if(userName.equalsIgnoreCase(pwd)){
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10);
ActiveUser mActiveUser = new ActiveUser();
mActiveUser.setUserName(userName);
session.setAttribute("userName", mActiveUser);
RequestDispatcher rd = request.getRequestDispatcher("welcome.html");
rd.forward(request, response);
}else{
response.setContentType("text/html");
out.print("UserName and password did not match, Please try again");
RequestDispatcher dispatchToIndex = request.getRequestDispatcher("index.html");
dispatchToIndex.include(request, response);
}
}
ActiveUser.java
@WebListener
public class ActiveUser implements HttpSessionBindingListener,
HttpSessionListener {
//overridden methods of the interfaces are included, and simple print statement is there to get know about callback is received or not.
问题:当会话在10秒后过期(超时)时,我没有收到所需的回调,但如果我在10秒后发送请求,它会正确地知道上一个会话已过期,我在ActiveUser->sessionDestroyed()和
ActiveUser->valueUnbound()和HttpSessionAttributeListener->attributeRemoved()
提前感谢过期后,会话不会立即销毁。会话销毁以一定的间隔缓慢地进行
- 延迟:当新请求到达已过期的会话时,将调用
李>sessionDestroyed()
- 在某些时间间隔:服务器运行低优先级计时器作业以清除所有过期会话
sessionDestroyed
方法
但是,如果请求没有首先发生,则不会发生自动重定向。因此,当用户尝试访问您的web应用程序时,可能会发生这种情况。在这种情况下,您不需要WebListener
(例如javax.servlet.http.HttpSessionListener),只需检查会话中是否设置了用户名或身份验证标志
如果你真的想要自动重定向,你可以通过js轮询或服务器推送来实现。有几次我在45-50秒后收到了回调。那么,这是否意味着每次会话超时应>1分钟minimum@GauravGupta看起来检查间隔大约在那个时间,这也取决于应用服务器。我想了很久了。谢谢你指出了根本原因。接受你的回答