J2EE - обработка тайм-аутов сеанса HttpSession при обслуживании флэш-содержимого - PullRequest
2 голосов
/ 18 февраля 2010

При подаче обучающих материалов на основе флэш-памяти пользователи периодически испытывают таймаут сеанса HttpSession. В настоящее время тайм-аут неактивности установлен по умолчанию (30 минут).

Вопросы:

  1. Будет ли хорошей идеей попытаться увеличить MaxInactiveInterval для любого пользователя, который запрашивает обучающее флэш-видео для предотвращения тайм-аутов?

  2. Будет ли лучше использовать прослушиватель жизненного цикла сервлета для повторной активации HttpSession, если HttpSession связан с просмотром обучающего контента? - это может позволить более точно контролировать время ожидания объекта HttpSession.

  3. Только небольшой процент пользователей будет действительно просматривать этот материал в любое время, есть ли какое-то снижение производительности за это?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Скорее запустите ajax-опросы на заднем плане.

Вот SSCCE с небольшой помощью jQuery .Просто скопируйте и запустите его (и измените объект flash, чтобы он соответствовал вашему фактическому коду).

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2290101</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                setInterval(function() {
                    $.get('poll');
                }, ${(pageContext.session.maxInactiveInterval - 10) * 1000});
            });
        </script>
    </head>
    <body>
        <object type="application/x-shockwave-flash" ... >
            ...
        </object>
    </body>
</html>

Здесь ${pageContext.session.maxInactiveInterval} возвращает остаток секунд сеансаеще не выжил (и был немного сокращен - просто чтобы успеть к опросу - и преобразован в миллисекунды так, чтобы он соответствовал тому, что ожидает setInterval()).$.get('poll') должен вызывать сервлет, который отображается на url-pattern из /poll и содержит в основном следующую строку в методе doGet().

request.getSession(); // Keep session alive.

Вот и все.

1 голос
/ 18 февраля 2010

Встроено ли флэш-видео в HTML-страницу?Если это так, возможно, у вас может быть вызов AJAX на странице, который периодически отправляет «сердцебиение» на сервер, чтобы поддержать сеанс.

...