gpt4 book ai didi

javascript - 不活动/浏览器关闭 - 将状态更改为 0 并在用户返回时返回 1

转载 作者:行者123 更新时间:2023-12-02 07:30:05 31 4
gpt4 key购买 nike

我试图让我的网站在在线用户处于非事件状态或关闭浏览器时将其状态设置为 0。如果他们重新打开网站或从空闲状态恢复(超时后),我希望状态恢复为 1(除非他们由于长时间不在网站而已完全注销)

到目前为止,这是我尝试过的:

Inactive.php

include 'db.php';
mysql_query("UPDATE users SET status = 0 WHERE user_id = ".$_SESSION['user_id']."");

检查浏览器是否关闭

window.onbeforeunload = function() {
$.ajax({
url: 'inactive.php',
type: 'GET',
async: false,
timeout: 4000
});
};

检查空闲超时

var IDLE_TIMEOUT = 60; //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("Time expired!");
document.location.href = "inactive.php";
}
}

我的查询似乎不起作用。我如何告诉它每 x 秒检查哪个用户?

最佳答案

window.onbeforeunload 将产生竞争条件并且不会很可靠。此外,您还想使用 window.addEventListener('beforeunload', function () {...}); 代替

CheckIdleTime 中的 alert 将停止执行 javascript,因此用户必须进行交互(单击 OK) 注销。否则,这种方法似乎没问题。

现在,当用户离开页面时,通常您会将 cookie 设置为在离开网站时过期,但您似乎希望在您的网站上统计活跃用户。

为此,您可能需要一个两步走的方法,为“上次激活”主动设置标志和时间戳。并且还运行一个垃圾收集脚本,如果您有一段时间没有看到他们的任何事件,则将用户设置为“不活动”。

如果您需要活跃用户的真正实时日志,您可能需要查看 Node.js,尤其是 Socket.IO,它可以处理得更好具有实时客户端-服务器 IO。

运行一个更新用户说他们实际上是活跃的查询可能要容易得多

 <script>
setInterval(function () {
$.post('active.php');
},
15000 // every 15 seconds
);
</script>

在active.php中(假设你添加了一个新的last_activeDATETIME,并且user_id是一个int:

 mysql_query("UPDATE users SET status = 1, `last_active` = NOW() WHERE user_id = ". (int)$_SESSION['user_id']."");
mysql_query("UPDATE users SET status = 0 WHERE `status` = 1 AND `last_active` < DATE_SUB(NOW(), INTERVAL 15 SECOND)"); // set all in active who have not pinged in the last 15 seconds

这可能是模式的样子

 CREATE TABLE `users`
`id` IN NOT NULL,
`status` INT(1) DEFAULT 0,
`last_active` DATETIME
);

您可能想尝试一下“非事件”时间间隔,并考虑创建一个索引。

关于javascript - 不活动/浏览器关闭 - 将状态更改为 0 并在用户返回时返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22857885/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com