我正在尝试在Java Web项目中创建一个登录过滤器。问题是,当我调用request.getSession(false)时,返回的会话对象不为null,换句话说,该会话处于活动状态。但是我确定我没有在代码的任何其他地方调用getSession()。
即使我删除了此过滤器,它也无法正常工作。如果打开浏览器开发工具,则在“网络”选项卡中,它将显示一个jsessionid集。会话是自动设置的吗?
最佳答案
如果您想跟踪“登录用户”,那么我认为您正在寻找的是使用HttpSession进行跟踪,如下所示:
HttpSession session = request.getSession();
session.setAttribute("loggedInUser", userObject);
如果需要,Ypu可以从会话中检索它,方法是:
Object loggedInUser = session.getAttribute("loggedInUser");
然后,当用户需要“注销”时,请从会话中清除存储的用户:
session.removeAttribute("loggedInUser");
要在注释
What's the point to have a HttpSession class/api if i have to implement everything by myself?
中回答您的问题:HttpSession
表示与特定客户端的对话,因此可以识别并正确处理来自同一客户端的后续请求。它根本不表示“登录用户”,这是域的特定要求-并非所有服务都需要身份验证。最后,如果您需要有关何时创建JSESSIONID cookie的更多详细信息,请阅读this question。
关于java - Java Web, session 是自动设置的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56389098/