2013-08-02 3 views
0

Я имею дело с JSP-Web-Application и получаю проблемы в момент окончания сеанса. Как указано в web.xml, таймаут определяется через 30 минут. Но я хочу сохранить сеанс в течение времени, когда пользователь просто открывает окно. Сначала я подумал о простом AJAX-компоненте, который говорит «привет» серверу каждые 10 минут и, возможно, запускает простой тестовый отчет в базу данных (например, «Выбрать 1»).Каков наилучший способ обработки тайм-аута сеанса?

Но две вещи делают меня подозрительным по этому поводу:

  1. Если бы я поставил простой setTimeout(sayHi(),600) в бесконечном While-JS-цикла это эффективное и мудрое решение?
  2. Является ли даже концепция этой хорошей идеи?

Все пользователи системы совместно используют объединенное соединение BoneCP с базой данных для выполнения коротких запросов из базы данных. Также несколько строк данных извлекаются через Hibernate. Часть Hibernate является самой подверженной ошибкам частью всего приложения, после таймаута эти наборы также необходимо перезагрузить. Есть ли способ сохранить сеанс Hibernate?

Благодарим за помощь!

+0

В моих глазах то, что вы делаете, это контрпродуктивно: с одной стороны, вы хотите ограничить промежуток времени, который пользователь должен изучить на веб-сайте, делая все, что он хочет, и, с другой стороны, искусственно расширяет этот предел. Почему бы просто не увеличить время ожидания до 2 часов, и все готово? –

+0

1) Если это непроизводительно, пожалуйста, дайте мне лучший совет, вот что я просил. 2) Это решение бесполезно, если кто-то отсутствовал в течение 2 часов и 1 минуты 3) Решение Ray Wadkins предоставило отличный побочный эффект, позволяющий работать над правильным управлением сеансом в случае, если пользователи не вышли из системы – Qohelet

+0

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

ответ

0

Я могу говорить только о тайм-ауте. Бесконечный while-JS-цикл не будет работать, потому что javascript в браузере работает в одном потоке, цикл блокирует все другие действия, эффективно замораживая вашу страницу.

setInterval метод window объекта будет выполнять действия (полу) регулярно с интервалом можно определить

setInterval(sayHi, 600000)

заставит SayHi бежать как можно скорее после 10 минут (600000 миллисекунд). Но в то же время будут разрешены другие операции.

(также отметить, что я удалил скобки из ваших SayHi SayHi() будет решить сразу, что это не то, что вы хотите.).

+0

Звучит здорово, пока это функция, которую я искал. Из-за того, что JS не может обрабатывать Threads, тайм-аут все испортит. Спасибо! Знаете ли вы, что может понадобиться, чтобы сохранить также Спящий режим? – Qohelet

+0

Существует также способ использования setTimeout. Но это более сложный уровень в излишней манере, поэтому я не упоминал об этом. К сожалению, я не разработчик Java, поэтому я не могу помочь вам на стороне сервера. –

+0

Но большое спасибо за вашу идею! – Qohelet

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