Я не знаю, что еще я могу сделать, чтобы предотвратить это, но пользователи моего приложения все еще жалуются на преждевременный выход из системы.У меня есть два тайм-аута, один с JavaScript, который обнаруживает неактивность в браузере, и другой с PHP, который обнаруживает отсутствие запросов страниц.Я подозреваю, что проблема может быть из-за истечения срока действия переменных сеанса пользователя.
Вот все, что я пробовал:
Все страницы начинаютсясо следующим, который увеличивает максимальное время жизни сеанса, назначает выделенный путь сохранения для переменной сеанса, устанавливает параметры cookie сеанса равными 0 и запускает сеанс:
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.save_path', 'C:\path\to\session_folder');
session_set_cookie_params(0);
session_start();
Запрос на публикациюотправляется каждые пять минут на страницу, которая обновляет сеанс, снова запуская приведенный выше код ^:
setInterval(function() { $.post('refresh_session.php'); }, 1000 * 300);
refresh_session.php также переназначает переменные сеанса для дальнейшего предотвращения истечения срока действия / тайм-аута:
if (isset($_SESSION['username'])) {
$_SESSION['username'] = $_SESSION['username'];
}
if (isset($_SESSION['access'])) {
$_SESSION['access'] = $_SESSION['access'];
}
if (isset($_SESSION['LAST_ACTIVITY'])) {
$_SESSION['LAST_ACTIVITY'] = $_SERVER['REQUEST_TIME'];
}
Для элемента управления кэшем установлено значение «без кэша», не уверены, что это имеет значение?:
header('Cache-Control', 'no-cache');
Вот 2 таймаута:
JavaScript:
//Log out user after 30 mins no activity
if (<?php echo json_encode($_SESSION['username']); ?> != "admin") {
(function() {
let lastAct = Date.now();
document.onmousemove = function() {
lastAct = Date.now();
}
document.onclick = function() {
lastAct = Date.now();
}
document.onscroll = function() {
lastAct = Date.now();
}
document.onkeypress = function() {
lastAct = Date.now();
}
setInterval(function() {
let diff = Date.now() - lastAct;
if (diff > 1000 * 1800) {
window.location.href = <?php echo json_encode($LoginLoc); ?>
}
}, 1000 * 300);
} ());
}
PHP:
//Check current time
$time = $_SERVER['REQUEST_TIME'];
//Session expires after 60 mins no page requests
if (isset($_SESSION['LAST_ACTIVITY']) && ($time - $_SESSION['LAST_ACTIVITY']) > 3600) {
header('Location:' . $LoginLoc);
}
//Check time of last activity
$_SESSION['LAST_ACTIVITY'] = $time;
Пользователи жалуются на вход в систему, доступ к странице с формой, занимающий несколько минутзаполнить его, а затем после подачи заявки выйти из системы / перенаправить на страницу входа.Это случается только время от времени.Время, которое занимает намного меньше установленного времени ожидания, и пользователь должен быть перенаправлен через время ожидания JavaScript, прежде чем время ожидания PHP вступит в силу.По этой причине я подозреваю, что проблема в истечении срока действия PHP-сессии, но я не знаю, что еще я могу сделать, чтобы предотвратить это.
На всех страницах пользователь будетперенаправляется на страницу входа в систему, если не задана переменная сеанса имени пользователя, и сценарий также заканчивается:
if (!isset($_SESSION['username']) || empty($_SESSION['username'])) {
header('Location:' . $LoginLoc);
die();
}