会话对象返回null

时间:2010-03-09 13:17:13

标签: java jsp session-state

我为我的项目“学生信息系统”创建了一个登录页面,其中包含用户名,用户ID和密码的文本字段。我试图在会话对象中存储用户名和用户ID的值,并在另一个页面中使用它但是它正在返回空值。

1 个答案:

答案 0 :(得分:0)

有几个原因:

  1. 你以错误的方式把它放在会话中(应该由session.setAttribute(key, value)完成)。
  2. 另一个页面位于不同的域/上下文中(因此不使用相同的会话)。
  3. 某些内容使会话无效(例如session.invalidate())。
  4. 客户端不支持cookie,您尚未添加URL重写支持。
  5. 您在会话中以错误的方式访问它(应由session.getAttribute(key)${key}完成。
  6. 以下login.jsp示例..

    <form action="login" method="post">
        Username: <input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        <input type="submit" value="login">
        <span class="error">${error}</span>
    </form>
    <p>Debug info: your current session ID is ${pageContext.session.id}</p>
    

    ..使用映射在/login上的servlet,doPost()中基本上有以下内容。

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userDAO.find(username, password);
        if (user != null) {
            request.getSession().setAttribute("user", user);
            response.sendRedirect(response.encodeRedirectURL("home.jsp"));
        } else {
            request.setAttribute("error", "Unknown login, try again");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }
    

    ..和home.jsp看起来像这样..

    <p>Welcome, ${user.name}!</p>
    <p>Debug info: your current session ID is ${pageContext.session.id}</p>
    

    ..应该正常工作。

    确保两个页面中的会话ID都是相同。出于调试目的,您可以按${pageContext.session.id}查看它,如上面的JSP代码片段所示。如果它是相同的并且User对象仍然不存在,则问题出在其他地方。