是否可以检测到PHP上的空闲使用,就像在JavaScript中检测一样,即使是鼠标焦点

时间:2017-07-08 11:44:01

标签: javascript php session logout idle-timer

然而,当用户使用我正在使用的会话空闲时,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 个答案:

答案 0 :(得分:1)

您可以使用JavaScript本地存储API

使用本地存储,Web应用程序可以在用户的​​浏览器中本地存储数据。

在HTML5之前,应用程序数据必须存储在cookie中,包含在每个服务器请求中。本地存储更安全,可以在本地存储大量数据,而不会影响网站性能。

与Cookie不同,存储限制要大得多(至少5MB),信息永远不会传输到服务器。

本地存储是按源(每个域和协议)。来自一个来源的所有页面都可以存储和访问相同的数据。

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对象,但它只存储一个会话的数据。当用户关闭特定浏览器选项卡时,将删除数据。