Можно ли обнаружить простаивающее использование на PHP, как обнаружение в JavaScript, даже для фокуса мыши

Однако в PHP есть много способов выйти из приложения, когда пользователь бездействует, используя сеанс, который я использую.

во время входа

$_SESSION['last_activity']=time()+10;

в заголовке

$expire_time = 10; //10 secs
if($_SESSION['last_activity'] < time()-$expire_time) {
    echo 'session destroyed';
}
else {
    $_SESSION['last_activity'] = time();
}

эта функция отключает пользователя, основываясь на кликах пользователя или обновлении страницы даже на вкладках, но не на событиях мыши, что возможно в javascript

var IDLE_TIMEOUT = 900; //seconds
var _idleSecondsCounter = 0;

document.onclick = function () {
    _idleSecondsCounter = 0;
};

document.onmousemove = function () {
    _idleSecondsCounter = 0;
};

document.onkeypress = function () {
    _idleSecondsCounter = 0;
};

window.setInterval(CheckIdleTime, 1000);

function CheckIdleTime() {
    _idleSecondsCounter++;
    var oPanel = document.getElementById("SecondsUntilExpire");
    if (oPanel)
        oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
    if (_idleSecondsCounter >= IDLE_TIMEOUT) {
       alert('Times up!, You are idle for about 15 minutes, Please login to continue');
        document.location.href = "logout.php";
    }
}

но это не сработает во всем проекте или вкладках, если пользователь удерживает вкладку без дела и работает на другой вкладке, весь проект выйдет из системы, есть ли способ заставить этот скрипт работать глобально или заставить php обнаруживать все события.

1 ответ

Вы можете использовать API локального хранилища JavaScript

Благодаря локальному хранилищу веб-приложения могут хранить данные локально в браузере пользователя.

До HTML5 данные приложения должны были храниться в файлах cookie, включенных в каждый запрос к серверу. Локальное хранилище более безопасно, и большие объемы данных могут храниться локально, не влияя на производительность веб-сайта.

В отличие от файлов cookie, лимит хранилища намного больше (не менее 5 МБ) и информация никогда не передается на сервер.

Локальное хранилище для каждого источника (для домена и протокола). Все страницы из одного источника могут хранить и получать доступ к одним и тем же данным.

var IDLE_TIMEOUT = 900; //seconds
    sessionStorage.idleSecondCounter =  0;

document.onclick = function () {
    sessionStorage.idleSecondCounter = 0;
};

document.onmousemove = function () {
    sessionStorage.idleSecondCounter = 0;
};

document.onkeypress = function () {
    sessionStorage.idleSecondCounter = 0;
};

window.setInterval(CheckIdleTime, 1000);

function CheckIdleTime() {
    sessionStorage.idleSecondCounter = parseInt(sessionStorage.idleSecondCounter)+1;
    var oPanel = document.getElementById("SecondsUntilExpire");
    if (oPanel)
        oPanel.innerHTML = (IDLE_TIMEOUT - sessionStorage.idleSecondCounter) + "";
    if (sessionStorage.idleSecondCounter >= IDLE_TIMEOUT) {
       alert('Times up!, You are idle for about 15 minutes, Please login to continue');
        document.location.href = "logout.php";
    }
}

Объект sessionStorage равен объекту localStorage, за исключением того, что он хранит данные только для одного сеанса. Данные удаляются, когда пользователь закрывает определенную вкладку браузера.

Другие вопросы по тегам