Можно ли обнаружить простаивающее использование на 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, за исключением того, что он хранит данные только для одного сеанса. Данные удаляются, когда пользователь закрывает определенную вкладку браузера.