Вы должны убедиться, что ВСЕ ваши объекты, которые вы храните в вашем сеансе, являются сериализуемыми. Если один из них не соответствует (или не соответствует требованиям Serializable), вы потеряете сеанс при перезагрузке веб-приложения или перезагрузке tomcat.
EG: для сервлета отлично работает:
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession();
Date date = (Date) session.getAttribute("date");
if (date == null) {
date = new Date();
session.setAttribute("date", date);
}
response.setContentType("text/plain");
PrintWriter pw = response.getWriter();
pw.println("New Session? " + session.isNew());
pw.println("Date : " + date);
pw.flush();
}
}