会话对象返回null

问题描述:

我创建了一个登录页面,我的项目“的学生信息系统”包含文本域的用户名,用户名和password.i试图用户名和用户ID的值存储在会话对象,并在另一页使用但它返回空值。会话对象返回null

几个原因:

  1. 你把它放在会话中的错误的方式(应session.setAttribute(key, value)完成)。
  2. 另一页是在一个不同的域/上下文(并因此不使用相同的会话)。
  3. 东西已经失效会话(例如session.invalidate())。
  4. 客户端不支持cookies,但您尚未添加URL重写支持。
  5. 你访问它在会话中的错误的方式(应session.getAttribute(key)${key}完成)。

以下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> 

..with映射/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对象仍然不存在,那么问题就在于别的地方。