【发布时间】:2011-09-12 20:07:26
【问题描述】:
我创建了一个非常简单的多用户游戏用于学习目的。
当用户登录时,每个其他用户都会获得所有当前登录用户的更新。
当用户登录时,它只是将该用户在 SQL 数据库中的值设置为 1。当他们注销时,该值应为 0。
我正在使用 $(window).unload(function() {});试图捕捉标签/浏览器关闭,但它只能工作。
两个问题:
有没有更好的方法让浏览器或标签页关闭?
如果它错过了标签关闭,或者他们的机器崩溃,或者互联网连接中断,或者用户只是离开机器,我想继续并自动将它们注销。
我正在使用带有 PHP 后端的 HTML/Jquery 前端。我该怎么做才能完成第二个问题?我假设我需要用 PHP 来做这件事。我们假设浏览器可能不再存在,因此不处理 jquery 的东西。 PHP 可以在一个连续的计时器上做一些事情来检查用户是否还在附近...而不是简单地让用户每 10 秒点击一个按钮?
编辑: 这里有一个潜在的解决方案:How to detect if a user has logged out, in php? 但我使用 ajax 来避免页面刷新。理想情况下,用户从不 f5 页面,或单击任何按钮(我正在测试,请记住,这不是真正的应用程序)。 PHP 会在不刷新整个页面的情况下查看最后一个活动吗?
编辑2: 我已将以下代码添加到我的 PHP 中,并使用 setInterval 使用相应的 jquery 函数
if (isset ($_POST['keepalive'])) {
if (filter_input(INPUT_POST,'keepalive') == '1') {
$name = $_SESSION['name'];
$time = time();
mysql_query("UPDATE tictac_names SET keep_alive = '$time' WHERE name ='$name'") or die(mysql_error());
}
}
这会在我的表中插入一个 unix epoc 时间戳,这对于简单的计算来说非常容易。
我现在的问题是:我如何告诉 PHP 在 X 秒内对每个登录用户运行一次检查?我的 PHP 后端文件主要设置为捕获 post 变量并运行代码,然后将其交给 jquery。由于此代码旨在注销不活动的浏览器/用户,因此我不能依赖 jquery 向 PHP 发送请求,并且没有刷新 PHP。我是否需要做一些 cron 工作或一些奇怪的事情来让 PHP 检查所有在最后 X 秒内没有更新的用户?
救命!
【问题讨论】: