2013-10-25 2 views
0

Ниже приведен мой код.Сеанс сервлета MaxInactiveInterval setter и методы getter не работают

В этом случае сеанс тайм-аутов НЕМЕДЛЕННО, потому что мы говорим: «таймаут после 0 секунд бездействия».

Поэтому session.getAttribute ("foo") должен предоставить исключение. Но код работает без сбоев, как будто сеанс не тайм-аут.

public void doGet(HttpServletRequest request, HttpServletResponse response) 
                  throws IOException { 
     response.setContentType(“text/html”); 
     PrintWriter out = response.getWriter(); 
     HttpSession session = request.getSession(); 
     session.setAttribute(“foo”, “42”); 
     session.setMaxInactiveInterval(0); 
     String foo = (String) session.getAttribute(“foo”); 
     if (session.isNew()) { 
      out.println(“This is a new session.”); 
      } else { 
      out.println(“Welcome back!”); 
     } 
     out.println(“Foo: “ + foo); 
} 

Похожая проблема, когда я использую getMaxInactiveInterval().

Он дает правильный результат при первом вызове setMaxInactiveInterval() явно. Но когда он не установлен программно, getMaxInactiveInterval не показывает тайм-аут сеанса по умолчанию, который составляет 30 минут. Вместо этого он всегда дает 60 секунд в качестве результата.

Мой Сервер Apache Tomcat 7. Спасибо за помощь

+1

Какой смысл устанавливать что-то в сеансе и получать его без обработки ответа ??? – LMG

+0

Этот код объяснялся в HeadFirst JSP и книге Servlet, чтобы показать семантику методов Session. Поэтому, пожалуйста, простите мне отсутствие логики, если таковая имеется, с точки зрения приложения, сэр. Спасибо за ваш ответ. – user961690

ответ

1
 session.setMaxInactiveInterval(0); 

По Docs

Определяет время в секундах, между запросами клиента перед контейнером сервлетов аннулирует эту сессию. Значение интервала, равное нулю или меньше, указывает на то, что сеанс никогда не должен истекать. Параметры: интервал - целое число, определяющее количество секунд

Так что, если вы поместите его в ноль ити никогда не будет тайм-аут. если вы попробуете с

  session.setMaxInactiveInterval(10); 

истекает через 10 секунд. Имейте в виду, что в файле web.xml есть значение, которое представляет собой тайм-аут в минутах, по отношению к тому, который вы устанавливаете программным путем, который представляет собой интервал, выраженный в секундах.

+0

Сэр, я проверил это со значением за 1 секунду до публикации этого вопроса. Затем я вызвал метод sleep (1200) в потоке сервлета, чтобы сеанс мог зайти, даже тогда он не работает. С getMaxInactiveInterval() я также рассмотрел эти факторы web.xml. Спасибо за ответ, сэр. – user961690

+1

не устанавливают время сна. вам нужно обновить страницу в течение 10 секунд, и вы увидите, что вы загружаете старый сеанс и через 10 секунд, чтобы вы видели, что сеанс является новым. попробуйте этот путь, пожалуйста, и вы поймете, что происходит – LMG

1

Tomcat заканчивает сеансы, используя фоновый поток. По умолчанию этот поток проверяет сеансы только один раз в минуту.

Если getMaxInactiveInterval() не возвращает значение по умолчанию 1800 (30 минут), то что-то, где-то изменилось значение по умолчанию.

+0

Спасибо за ответ. Желаю вам чудесного дня ... – user961690

+0

Хотел бы я принять ваш ответ тоже ... Потому что ваш ответ тоже направил меня к правильному пониманию темы. В любом случае, позвольте мне искать ответы, которые вы дали другим. Я подниму вас на эти полезные ответы (определенно их будет много). Я задолжала тебе, сэр ... – user961690

Смежные вопросы