2010-03-09 201 views
0

我創建了一個登錄頁面,我的項目「的學生信息系統」包含文本域的用戶名,用戶名和password.i試圖用戶名和用戶ID的值存儲在會話對象,並在另一頁使用但它返回空值。會話對象返回null

回答

0

幾個原因:

  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對象仍然不存在,那麼問題就在於別的地方。