【问题标题】:is it possible to detect idle use on php like detecting in JavaScript even for mouse focus是否可以检测 php 上的空闲使用,例如在 JavaScript 中检测,即使是鼠标焦点
【发布时间】:2017-07-08 11:44:01
【问题描述】:

但是,当用户使用我正在使用的会话空闲时,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 检测所有事件。

【问题讨论】:

  • 尝试使用 cookie 设置时间,然后检查
  • 使用javascript?
  • 否定选民你能解释一下这个问题有什么问题吗?
  • 可能是因为当 PHP 已经内置了会话不活动超时处理时,您正在 PHP 中编写自己的会话不活动超时
  • 哦,谢谢,我对内置函数一无所知。

标签: javascript php session logout idle-timer


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

【讨论】:

  • 试试localStorage.setItem('idleSecondCounter', 0); 而不是'sessionStorage.idleSecondCounter'
  • 请告诉我你使用的是哪个浏览器
  • 我忘了告诉你必须将它上传到服务器或网络,然后它才会起作用。如果您没有上传到服务器,它将无法跨标签工作
  • 感谢响应,实际上我也尝试了 localStorage 它的工作,但并不完美,如果我放置 10 秒并在某个选项卡上工作并跳转到第二个选项卡,我无法正常注销,但如果我离开两个选项卡并转到浏览器上的其他页面,它会在 2 或 3 秒内注销。我正在使用 chrome 最新版本
  • 我知道你什么时候打开了 2 个选项卡...它们是 2 个用于减少时间的脚本
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多