【问题标题】:Java Web, sessions are being set automaticallyJava Web,会话正在自动设置
【发布时间】:2019-10-16 18:00:08
【问题描述】:

我正在尝试在我的 java web 项目中创建一个登录过滤器。问题是,当我调用 request.getSession(false) 时,返回的会话对象不为空,换句话说,会话处于活动状态。但我确定我没有在代码的任何其他位置调用 getSession()。 即使我删除了这个过滤器,它也不起作用。如果我在网络选项卡中打开浏览器开发工具,它会显示一个 jsessionid 集。会话是自动设置的吗?

【问题讨论】:

  • 会话通常会自动创建。特别是如果客户端正在访问动态资源,如 servlet 或 jsp。
  • @ernest_k 那么,如果会话始终处于打开状态,我如何创建登录过滤器?
  • 会话并不意味着登录
  • 但是我如何才能确保这是一个登录会话?
  • 你可以决定并实现它,也许将数据存储在会话中......

标签: java session servlets jsessionid


【解决方案1】:

如果您想跟踪“登录用户”,那么我认为您正在寻找的是使用 HttpSession 跟踪它,如下所示:

HttpSession session = request.getSession();
session.setAttribute("loggedInUser", userObject);

Ypu 可以在需要时从会话中检索它:

Object loggedInUser = session.getAttribute("loggedInUser");

然后,当用户需要“退出”时,从会话中清除存储的用户:

session.removeAttribute("loggedInUser");

在 cmets What's the point to have a HttpSession class/api if i have to implement everything by myself? 中回答您的问题:HttpSession 表示与特定客户端的对话,以便可以正确识别和处理来自同一客户端的后续请求。它根本不代表“登录用户”,这是域的特定要求 - 并非所有服务都需要身份验证。

最后,如果您需要更多关于何时创建 JSESSIONID cookie 的详细信息,请阅读this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2017-06-10
    • 2014-09-10
    相关资源
    最近更新 更多