Подтвердить что ты не робот

Session TimeOut в web.xml

Я пытаюсь понять реальную цель настройки сеанса в Web.xml для таймаута сеанса.

<!-- Session Configuration -->
<session-config>
        <session-timeout>60</session-timeout>
</session-config>

Теперь позвольте мне рассказать вам о моем вопросе.

Мое приложение импортирует/выгружает файл .txt, срок действия которого занимает более 1 часа, поскольку импортируются миллионы записей. Но сеанс истекает через 1 час, хотя мое приложение по-прежнему импортирует этот файл .txt, который выполняется. Такое приложение не должно таймаутом, так как приложение выполняет некоторую задачу в фоновом режиме.

4b9b3361

Ответ 1

Чтобы установить тайм-аут сеанса, который никогда не истекает, нежелательно, потому что вы будете надежно нажимать кнопку выхода из системы каждый раз, когда он закончит, чтобы ваш сервер слишком сильно загружал (в зависимости от количества пользователей и аппаратное обеспечение). Кроме того, есть некоторые проблемы безопасности, с которыми вы могли столкнуться, скорее избегали бы.

Причина, по которой сеанс становится недействительным, пока сервер все еще работает над задачей, заключается в отсутствии связи между клиентской стороной (браузером пользователей) и сервером через, например, http-запрос. Поэтому сервер не может знать о состоянии пользователей, думает, что он работает на холостом ходу и делает недействительным сеанс после времени, установленного в вашем web.xml.

Чтобы обойти это, у вас есть несколько возможностей:

  • Вы можете выполнить ping-бэкэнд во время выполнения задачи, чтобы коснуться сессии и не допустить ее истечения.
  • увеличьте <session-timeout> внутри сервера, но я бы не рекомендовал этот
  • запустите задачу в выделенном потоке, который затрагивает (расширяет) сеанс во время работы или уведомляет пользователя о завершении потока

Был задан аналогичный вопрос, возможно, вы можете адаптировать части этого решения в своем проекте. Посмотрите .

Надеюсь, это поможет, получай удовольствие!

Ответ 2

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

Вы можете использовать "-1", где сеанс никогда не истекает. Поскольку вы не знаете, сколько времени потребуется для завершения потока.

Ответ 3

Отправить AJAX Http Запросы на сервер периодически (скажем один раз каждые 60 секунд) через javascript для поддержки сеанса с сервером до завершения загрузки файла.

Ответ 4

Хакер:

Вы можете увеличить тайм-аут сеанса программным способом, когда ожидается большая загрузка/загрузка.

session.setMaxInactiveInterval(TWO_HOURS_IN_SECONDS)

Когда процесс завершится, вы можете установить время ожидания на значение по умолчанию.

Но.. когда вы находитесь на Java EE, а загрузка/загрузка занимает не полный час, лучшим способом было выполнение задач асинхронно (через JMS, например.).

Ответ 5

<session-config>
        <session-timeout>-1</session-timeout>
</session-config>

В приведенном выше коде "60" stands for the minutes. Сессия истекло после 60 minutes. Итак, если вы хотите больше времени. Для примера -1, который описан, ваш сеанс никогда не истекает.

Ответ 6

В документах говорится:

Элемент session-timeout определяет интервал таймаута сеанса по умолчанию для всех сеансов, созданных в этом веб-приложении. Указанный тайм-аут должен быть выражен в течение целого числа минут. Если тайм-аут равен 0 или меньше, контейнер гарантирует, что поведение по умолчанию в сеансах никогда не заканчивается. Если этот элемент не указан, контейнер должен установить свой период ожидания по умолчанию.

Ответ 7

В качестве ответа для вашего вопроса вы можете увидеть множество вариантов, однако вы можете использовать "-1", где сеанс никогда не истекает. Поскольку вы не знаете, сколько времени потребуется для завершения потока. Например:.

   <session-config>
        <session-timeout>-1</session-timeout>
    </session-config>

Или, если вы не хотите, чтобы тайм-аут происходил с определенной целью:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

Другим вариантом может быть увеличение числа до 1000 и т.д. и т.д., bla, bla, bla.

Но если вы действительно хотите остановиться, и вы считаете, что для приложения не нужно принудительно выходить из системы, просто добавьте кнопку выхода из системы, и пользователь решит, когда уйти.

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

<!-- sets the default session timeout to 60 minutes. -->
   <!-- <session-config>
     <session-timeout>60</session-timeout>
   </session-config> -->

Просто прокомментируй или удали его! Tan tararantan, tan tan!

Ответ 8

вы можете объявить время двумя способами для этой проблемы.

1) либо дайте слишком много времени, чтобы ваше чтение файла было завершено между этим временем.

<session-config>
    <session-timeout> 1000 </session-timeout>
</session-config>

2) объявите время, которое никогда не заканчивается.

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

Ответ 9

Другим вариантом, который я бы рекомендовал, является создание отдельного приложения, которое является апатридом, для которого требуется большой файл. В главном приложении откройте новое окно или iframe, который примет файл и отправит его через это окно, затем спрячьте окно или iframe после того, как загрузка начнется с Javascript.

Ответ 10

Если вы не хотите, чтобы таймаут происходил с определенной целью:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

Не должно быть никакого таймаута → бесконечно

Ответ 11

Вы должны рассмотреть возможность разделения большого файла на куски и полагаться на возможности многопоточности для обработки более чем одного файла за раз ИЛИ пусть весь процесс запускается в качестве фоновой задачи с использованием TimerTask и записывает другой запрос, чтобы узнать его статус в браузере, включая индикатор выполнения, если вы можете узнать время процесса файла или записи.

Ответ 12

Обычно сеанс не истекает, когда происходит обработка запроса. Я думаю, что есть LB или что-то среднее между которым читает весь файл, а затем вызывает веб-контейнер.

Это может привести к задержке, которая приведет к истечению срока действия сеанса.