Несколько причин:
- Вы поставили это в сеансе неправильно (должно быть сделано
session.setAttribute(key, value)
).
- Другая страница находится в другом домене / контексте (и поэтому не использует тот же сеанс).
- Что-то сделало сеанс недействительным (например,
session.invalidate()
).
- Клиент не поддерживает файлы cookie, и вы не добавили поддержку перезаписи URL.
- Вы обращаетесь к нему в сеансе неправильно (должно быть сделано
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>
.. с сервлетом, отображенным на /login
, который имеет в основном следующее в 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>
.. должно просто работать.
Убедитесь, что идентификатор сеанса является одинаковым на обеих страницах. В целях отладки вы можете просмотреть его с помощью ${pageContext.session.id}
, как показано в приведенных выше фрагментах кода JSP. Если он такой же, а объект User
по-прежнему отсутствует, то проблема заключается в другом месте.