gpt4 book ai didi

java - session 超时回调

转载 作者:行者123 更新时间:2023-11-30 04:07:12 25 4
gpt4 key购买 nike

这个问题可以通过谷歌搜索来解决,我也是,但是由于我是servlet技术的新手,所以我无法解决这个问题。

我需要将 session 分配给特定用户, session 将在 10 秒后过期,当 session 过期时,用户将再次转发到 login.html 页面。

我读了一些相关内容,但当 session 过期时我没有收到回调。这是我的尝试。

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.

问题:当 session 在 10 秒后过期(超时)时,我没有按要求收到回调,但如果我在 10 秒后发送请求,它会正确地知道上一个 session 已过期,并且我在 ActiveUser->sessionDestroyed() 和
ActiveUser->valueUnbound() 和 HttpSessionAttributeListener->attributeRemoved()

提前致谢

最佳答案

session 检查的时间间隔肯定可能超过 10 秒 ( HttpSessionListener not detecting session timeout )。如果您等待一段时间,sessionDestroyed 方法将被调用。

但是,如果没有首先发出请求,则不会发生自动重定向。因此,当用户尝试访问您的网络应用程序时,就会发生这种情况。在这种情况下,您不需要 WebListener (例如 javax.servlet.http.HttpSessionListener),您只需检查 session 中是否设置了用户名或身份验证标志即可。

如果你确实想要自动重定向,可以通过 js 轮询或服务器推送来实现。

关于java - session 超时回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com