Отображение предупреждения об истечении времени ожидания в jQuery

В настоящее время я обрабатываю время ожидания из веб-приложения PHP как таковое:

  • Каждая страница в настоящее время имеет проверку тайм-аута в PHP, которая сверяет текущее время с последней загрузкой страницы пользователем. Если разница между ними превышает 15 минут, сеанс пользователя уничтожается, создается новый сеанс, текущее местоположение страницы помещается в сеанс, и пользователь перенаправляется на страницу входа.
  • Каждый заголовок страницы имеет тег <meta>, который обновляет страницу через 15 минут и 5 секунд (таким образом, «вызывая» проверку тайм-аута).

В настоящее время я рассматриваю возможность добавления большего контроля для пользователя, например, если он работает на странице в течение длительного периода времени, и я рассматриваю возможность появления всплывающего окна примерно за две минуты до тайм-аута. Затем всплывающее окно будет иметь возможность либо продолжить сеанс (сделать вызов AJAX, чтобы обновить последнее действие в сеансе), либо выйти из системы. Если всплывающее окно игнорируется (например, если пользователь находится на другой странице), пользователь выходит из системы.

Согласно Использование Javascript для переопределения или отключения тега метаобновления, я не смогу сбросить тег <meta>, что, вероятно, означает, что мне придется удалить тег. Единственный ответ PHP/Javascript Session Timeout с предупреждением предлагает использовать JavaScript вызовите перенаправление на страницу входа, однако это можно обойти, отключив JavaScript.

Я думаю о том, чтобы окружить тег перенаправления <meta> с помощью <noscript> (допустимо, поскольку я использую HTML5), так что даже если пользователь не использует JavaScript, время ожидания все равно истекло. Это также удалит тег <meta> из срабатывания независимо от того, решит ли пользователь продолжить сеанс.

Будет ли этот подход иметь смысл? Я что-то упускаю? Есть ли другой подход, который имел бы больше смысла?


Мой текущий код

<?php
require_once("include/session.php");
require_once("include/sessioncheck.php");
?>
<html>
    <head>
         <meta http-equiv="refresh" content="<?= TIMEOUT_MIN * 60 ?>" />
         <!-- additional tags -->
    </head>
    <body>
        <!-- content -->
    </body>
</html>

person Chris Forrence    schedule 28.02.2013    source источник
comment
Конфигурация тайм-аута сеанса уже существует в конфигурации PHP.   -  person MatRt    schedule 01.03.2013
comment
@user1073122 user1073122 - Хотя кажется, что я могу изменить это в файле .htaccess, похоже, что это будет применяться глобально (когда я буду добавлять разные тайм-ауты для разных групп пользователей). В любом случае я хочу обновить страницу без активности пользователя (это означает, что пользователь не обязательно будет щелкать где-либо и, возможно, отошел от компьютера)   -  person Chris Forrence    schedule 01.03.2013
comment
Попробуйте добавить javascript перед метатегом, чтобы отредактировать метатег.   -  person Vineet1982    schedule 01.03.2013


Ответы (1)


В итоге я оставил свой код sessioncheck.php и удалил тег <meta>. Затем я добавил следующее перед закрывающим тегом body:

<div id="timeout-warning"></div>
<div id="timeout-warning-text">Your session is set to expire in less than one minute
    due to inactivity. Click <a href="javascript:void(0)" id="timeout-restart">
    here</a> to keep your session alive.</div>

<script type="text/javascript">
    var timeoutWarning;
    var timeout;
    $(document).ready(function() {
        $("#timeout-restart").click(function() {
            clearTimeout(timeout);
            timeout = setTimeout(function() {
                document.location.reload(false);
            }, 1801000);
            timeoutWarning = setTimeout(function() {
                $("#timeout-warning").fadeTo(2000, 0.5);
                $("#timeout-warning-text").fadeIn(2000);
            }, 1740000);
            $("#timeout-warning").hide();
            $("#timeout-warning-text").hide();
            return false;
        });

        timeoutWarning = setTimeout(function() {
            $("#timeout-warning").fadeTo(2000, 0.5);
            $("#timeout-warning-text").fadeIn(2000);
            clearTimeout(softTimeout);
        }, 1740000);
        timeout = setTimeout(function() {
            document.location.reload(false);
        }, 1801000);
    });
    </script>

Числа 1740000 и 1801000 основаны на константе PHP, которая основана на тайм-ауте в полчаса.

person Chris Forrence    schedule 08.03.2013