我正在尝试在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/

10-10 17:04
查看更多