Предположим, у вас есть два сервлета:
login.java (создает новый сеанс и печатает JSESSIONID)
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try{
HttpSession s = request.getSession();
out.print(s.getId());
}
finally{
out.close();
}
}
session.java (печатает материал, только если пользователь аутентифицирован)
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession s = request.getSession(false);
if(s == null){
response.sendError(401);
}else{
try{
out.print("Welcome back, ID" + s.getId());
}
finally{
out.close();
}
}
}
Если я сначала запускаю логин, а затем сессию (но я не закрываю браузер), все в порядке.
Если я сначала запускаю логин, то я закрываю браузер, снова открываю его и набираю:
HTTP: \ локальный: 8080 \ ApplicationName \ сессии; JSESSIONID = theidprintedbylogin
Я получаю сообщение об ошибке 401. (Я провел эти тесты с отключенными файлами cookie!). Срок действия httpsession уже истек, хотя срок его действия составляет 30 минут?