【问题标题】:Why Isn't Session Null为什么会话不是空的
【发布时间】:2011-11-30 08:31:48
【问题描述】:

如果用户已经登录,我将使用以下代码将用户引导至欢迎页面,如果尚未登录,则返回登录页面。

        HttpSession session = request.getSession(false);

    if(session == null){
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
    }else{
        //User already logged in. Send to home.
        response.sendRedirect("Welcome");
    }

第一次,它工作正常,但如果我重新加载页面,即使它将用户发送到欢迎页面并且不可避免地给我发回 500 错误,因为该页面上的元素由于用户登录而无法加载in 代码尚未执行。

即使在重新加载页面时未声明 request.getSession(true),会话是否会自动启动?有没有办法防止这种情况发生?

【问题讨论】:

    标签: java session jakarta-ee servlets


    【解决方案1】:

    在转发到login.jsp 时可能正在创建会话。这是必要的,因为必须将用户分配给未经身份验证的请求并然后对其进行身份验证。如果要根据用户是否登录进行重定向,请使用SessionContextgetCallerPrincipal

    欲了解更多信息,请查看this (somewhat old, but still relevant) article

    【讨论】:

      【解决方案2】:

      request.getSession(false) 方法返回 null 如果没有当前会话。我建议也比较一个键。

      请看看这个帖子。

      1. Do JSPs always create a session?
      2. How do servlets work? Instantiation, session variables and multithreading

      【讨论】:

      • 我同意这一点。不要依赖季节的空值来查看用户是否登录。当他登录时,设置一个属性(例如session.setAttribute("userId", user.getId())并使用它来查看用户是否登录。否则如果您想使用JEE提供的内置安全机制,@PaoloVictor的解决方案更有意义。
      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      相关资源
      最近更新 更多