如何检测用户何时不在线?

时间:2015-07-12 04:49:19

标签: php mysql tracking

我有一个PHP编码的管理仪表板 现在我想知道我的ONLINE用户。为此我在数据库中创建了一个名为“ONLINE”的表。当访问者/用户访问我的网站时,其IP保存在我的数据库和在仪表板上,显示 1位用户在线

问题从这里开始。我希望当访问者/用户离开我的网站时(关闭网站,关闭标签和整个浏览器)。这保存了用户的IP(在ONLINE表中),迁移或转移到名为“VISITORS”的数据库中的另一个表。

3 个答案:

答案 0 :(得分:2)

检测用户出口有点模糊。您可以使用javascript向服务器发送退出通知,例如:

window.onbeforeunload = function() {
   ... insert your ajax code here ...
}

有很多条件不会触发,所以更好的方法是使用签入代码。你可以创建一个插入/更新ONLINE表的php脚本(假设你的表上的IP字段设置为UNIQUE或PRIMARY键,还要求你在表上创建一个TIMESTAMP字段 - 我将其命名为last_check_in):< / p>

<?php
... connect to database ...
$statement = $db->prepare("INSERT INTO `ONLINE` SET `IP` = ?, `last_check_in` = NOW() ON DUPLICATE KEY UPDATE `last_check_in` = NOW()");
$statement->execute([$_SERVER['REMOTE_ADDR']]);

然后你可以在一个计时器上放一个ajax调用(这里是jquery的ajax页面:http://api.jquery.com/jquery.ajax/,你可以在你的回调中使用setTimeout安排下一次更新)来检查页面。

然后,您可以将显示在线用户的查询更改为仅显示最近已签到的用户:

<YOUR QUERY> WHERE <your WHERE stuff> AND `last_checkin` > NOW() - INTERVAL 1 MINUTE

这实际上允许你只使用一个表而不是两个表,但如果你设置使用两个表,你可以编写另一个脚本来移动未检入的用户并将其放在cron计时器上

答案 1 :(得分:1)

因此,要确定用户是否离开&#34;您需要存储某种最后活动时间戳,并确定您考虑的阈值时间段&#34;活动&#34;。这可能是30分钟,或15或一小时;它真的取决于你。

您可以通过using MySQL to handle your sessions完成一项任务,实现两个目标。无论何时创建或更新会话,您还可以在更新会话时存储IP地址和时间戳。如果用户退出,系统会调用JavaScript,会在您的会话处理程序中调用session_destroy(),您可以在其中移动&#34;非登录用户的IP表。使用自定义会话处理程序为您提供了放置所有逻辑的直接位置。

答案 2 :(得分:1)

使用一张桌子&#34;访客&#34;。 例如,周期为1小时。 添加字段:

  • FirstActivityInHour (DateTime,TimeStamp或Int(分钟部分))
  • LastActivityInHour (DateTime,TimeStamp或Int(分钟部分))

如果访问者离开网站 - 您无法跟踪此操作,也无法执行操作。您可以跟踪上一个操作。

如果 LastActivityInHour 即将到来的时刻 - 访客在线。非最佳查询示例(FirstActivityInHour,LastActivityInHour - DateTime):

SELECT ...
    FROM "Visitors"
WHERE
    LastActivityInHour > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
    AND
    DATE_ADD(FirstActivityInHour, INTERVAL 1 HOUR) > NOW();