В настоящее время я обрабатываю время ожидания из веб-приложения 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>