计算用户连接到站点的时间


Counting the time a user has been connected to a site

目前我正在使用这个SQL来检查用户是否已连接:

date_add(last_activity, INTERVAL 3 MINUTE) > NOW()

这是被动的,仅在加载页面时触发。

我想做的是一个系统,检查用户在给定的时间段内是否保持连接,并给他们奖励积分。

你有什么建议来实现这一点?使用轮询或其他方法?

您需要使用某种 java 脚本,该脚本将以大约 1 分钟的间隔向您的网站报告使用 ajax 的活动。您需要实现某种机制来检查用户是否处于活动状态,例如鼠标是否移动或页面滚动,因为某些用户可以长时间使用同一页面。如果该页面自上一分钟以来未被使用(应该是 javascript 中的全局变量,每次鼠标移动都设置为 true,每次发送消息时都设置为 false),则不会发送消息。
当您在服务器中收到 ajax 通知时,您会检查上次 ajax 通知(应存储在数据库中)和当前通知之间的时间,如果它小于间隔(可能为 2 分钟)则为用户提供分数。

如前所述,您可以使用 AJAX 和刷新 META 标记。请注意,如果我看到浏览器选项卡不断刷新,我会关闭它,因为它会分散注意力。当然,如果您提供的服务需要频繁刷新(聊天/喊话箱,自动收报机),那么它就不会那么令人不安。

我目前打开了 14 个选项卡,其中一些标签几天我没有真正看过,所以你必须问你的信息有多有价值。据我所知,如果javascript没有在处理了mousemove事件的东西上移动,则无法获得当前的鼠标位置,因此实现"页面是否在视图中并且用户移动鼠标"可能会在用户活动时触发很多事件。

我在这里可能过于简单化了,如果你想在网站上收取时间或类似的东西,这可能没有多大帮助,但这是谷歌分析照顾的事情。 现场时间是他们主动记录的指标。

好的。所以这是我的想法。正如我在评论中提到的,我的方式是javascript超时和AJAX。
所以这个想法是这样的:

  1. 为鼠标位置创建一个全局变量。
  2. 设置函数的超时,以大约 10 秒的间隔触发(可能会随时间增长)。
  3. 函数将上次鼠标位置与当前鼠标位置进行比较。如果它已更改,则用户可能处于活动状态。
  4. 更新鼠标位置的全局变量。并将数据发送到服务器端。
  5. 冲洗并重复...

实际上,如果您愿意,更改的东西可以是任何东西,但我认为鼠标位置将是最合适的。