定时自动注销和关闭浏览器

19 浏览
0 Comments

定时自动注销和关闭浏览器

我为了学习目的创建了一个非常简单的多用户游戏。

当用户登录时,其他用户会收到所有当前登录用户的更新。

当用户登录时,它只是在SQL数据库中为该用户设置一个值为1。当他们退出登录时,该值应该为0。

我正在使用$(window).unload(function() {});来尝试捕捉标签/浏览器关闭,但它只能部分工作。

两个问题:

1.有没有更好的方法来捕捉浏览器或标签关闭?

2.如果它错过了标签关闭,或者他们的机器崩溃,或者网络连接断开,或者用户只是离开机器,我希望自动将他们注销。

我正在使用HTML/Jquery前端和PHP后端。为了实现第二个问题,我应该做些什么?我假设我需要在PHP中做这个...我们假设浏览器很可能已经不存在,因此不处理jquery的东西。PHP是否可以在连续的定时器上执行某些操作,以检查用户是否仍在登录...而不仅仅是让用户每隔10秒点击一个按钮?

编辑:

这里有一个潜在的解决方案:如何检测用户是否已在PHP中注销?

但是我正在使用ajax来避免页面刷新。理想情况下,用户将永远不会刷新页面或点击任何按钮(请记住,我正在测试,这不是一个真正的应用程序)。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秒内没有更新的用户吗?

求助!

0
0 Comments

问题:timed auto logout and browser close的原因和解决方法

在使用HTML5的socket连接作为与服务器连接的方式时,socket服务器脚本可以知道何时有订阅者断开连接。这也允许您实时向所有客户端推送数据,而无需进行长轮询。唯一的问题是我不知道目前HTML5 sockets的支持情况。我以前使用过Flash进行类似操作,Flash也支持socket连接。

解决方法:

1. 使用HTML5的socket连接作为与服务器连接的方式。

2. 在socket服务器脚本中实现对订阅者断开连接的检测。

3. 在断开连接时执行相应的操作,例如自动登出用户或关闭浏览器。

4. 如果HTML5 sockets的支持不确定,可以考虑使用Flash作为替代方案。

5. 可以参考tenthtower.com网站来了解实际应用示例。

0
0 Comments

问题的出现原因:

- 当用户关闭浏览器或者超过特定时间没有活动时,会导致会话(session)过期。

解决方法:

- 可以使用基于$_SESSION的解决方案来处理这个问题。

- 可以参考用户Gumbo在stackoverflow上的回答来实现。他提供了一个解决方案,可以在用户关闭浏览器时销毁或取消会话。

- 可以适应你的数据库需求对其进行调整。

代码示例:

// 开始会话
session_start();
// 设置会话过期时间(以秒为单位)
$session_timeout = 1800; // 30分钟
// 检查会话是否已经过期
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > $session_timeout)) {
    // 会话过期,销毁会话
    session_unset();
    session_destroy();
}
// 更新会话的最后活动时间
$_SESSION['last_activity'] = time();

这段代码首先开启会话(session),然后设置会话的过期时间为30分钟。接下来,它会检查会话的最后活动时间是否超过了设定的过期时间。如果超过了,会话将被销毁并清除。最后,它会更新会话的最后活动时间。

你可以根据自己的需求对这段代码进行修改和适应。

0
0 Comments

问题的原因是用户长时间不活动导致自动注销和浏览器关闭。为了解决这个问题,可以使用以下方法:

1. 在SQL数据库中为每个登录用户定期更新时间戳。可以设置一个脚本,在用户活动时定期更新时间戳。

// 更新用户时间戳
UPDATE users SET last_active = NOW() WHERE user_id = ?

2. 编写另一个脚本,定期检查时间戳是否超过指定的时间段(例如10秒)。如果时间戳超过指定时间段,将用户设置为未登录状态。

// 检查时间戳并设置用户状态
UPDATE users SET is_logged_in = 0 WHERE last_active < (NOW() - INTERVAL 10 SECOND)

3. 如果你使用AJAX,可以在后台定期调用一个PHP脚本来设置和检查SQL表中的时间戳。

setInterval(function() {
  $.ajax({
    url: 'check_timestamp.php',
    type: 'POST',
    success: function(response) {
      console.log('Timestamp checked successfully');
    }
  });
}, 10000); // 每10秒调用一次脚本

通过以上方法,可以定期检查用户的活动状态并自动注销不活动的用户,从而解决自动注销和浏览器关闭的问题。

0