为什么不会话空

时间:2011-10-04 02:15:36

标签: java session java-ee servlets

我使用以下代码将用户传递到欢迎页面(如果他们已经登录),或者如果他们不登录则返回登录页面。

        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错误,因为该页面上的元素由于用户登录而无法加载在代码中尚未执行。

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

2 个答案:

答案 0 :(得分:2)

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

有关详情,请查看this (somewhat old, but still relevant) article

答案 1 :(得分:0)

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

请看一下这个主题。

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