我已经创建了一个非常简单的多用户游戏用于学习.
当用户登录时,其他用户将获得所有当前登录用户的更新.
用户登录时,只需将SQL数据库中该用户的值设置为1.注销后,该值应为0.
我正在使用$(window).unload(function(){});尝试捕获选项卡/浏览器关闭,但这仅能正常工作.
两个问题:
>是否有更好的方法捕获浏览器或选项卡关闭?
>如果它错过了选项卡关闭,机器崩溃,互联网连接中断或用户只是离开机器的情况,我想继续并自动注销它们.
我正在使用HTML / Jquery前端和PHP后端.我该怎么做才能解决第二个问题?我假设我需要在PHP中执行此操作..我们正在假设浏览器可能不再存在,因此不处理jquery东西. PHP是否可以在连续计时器上执行某项操作,以检查用户是否仍然在… …而不必简单地让用户每10秒单击一次按钮?
编辑:
这里有一个潜在的解决方案:How to detect if a user has logged out, in php?
但是我正在使用ajax来避免页面刷新.理想情况下,用户永远不要f5页面或单击任何按钮(我正在测试,请记住,这不是真正的应用程序). PHP是否可以在没有刷新整个页面的情况下查看上一个活动?
EDIT2:
我已将以下代码添加到我的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后端文件主要是设置为捕获发布变量并运行代码,然后将其交还给jquery.由于此代码旨在注销不活动的浏览器/用户,因此我不能依靠jquery向PHP发送请求,并且没有刷新PHP.我是否需要做某种Cron作业或某种怪异操作才能使PHP检查最近X秒钟内未更新的所有用户?
救命!
解决方法:
不知道第一个问题,但是关于第二个问题的建议如何:
当用户处于“活动状态”时,他们是否会相当规律地引起页面请求?如果是这样,您可以拥有一个系统,通过该系统定期以时间戳记将登录的用户登录到SQL数据库中.然后让另一个脚本查找所有时间戳早于指定时间段(例如,您希望的时间,例如10秒)的所有用户,并将其设置为“ 0”.
我可以建议一些代码,但是也许这不是您想要的-让我知道.
编辑:好的,您编辑的链接似乎已经由我刚刚建议的类似系统回答.如果您使用AJAX,则可以在后台定期调用php脚本来设置和检查SQL表中的时间戳.