有什么解决方案在浏览器关闭时更新数据库?

时间:2013-03-29 07:08:30

标签: php mysql

我在数据库中有一个用户状态字段(在线/离线)。当用户在数据库中点击退出按钮时,在线更改为离线。但如果用户直接关闭浏览器而没有点击注销,那么如何更新数据库。

1 个答案:

答案 0 :(得分:1)

除非您有一个定期ping服务器的进程,否则您不能。

您的退出按钮很可能会将请求发送回您的服务器。收到该请求后,服务器运行/委托逻辑来更新数据库。如果用户在未单击注销按钮的情况下关闭浏览器,则服务器永远不会收到此请求。

@Antony提供了一个可能的解决方案。

另一种可能的解决方案是以给定的间隔向您的服务器发送消息。服务器应该期待这个电话。如果服务器未收到消息,则将用户标记为已注销。它具有退出时间戳的缺点。注销时间不准确。有关详细信息Ajax call with timer

,请参阅此主题

编辑#1 在我上面提到的链接中,它提到了如何以一定间隔运行javascript代码。

setInterval(function() {
    //call $.ajax here
}, 5000); //5 seconds

在您的情况下,使用此功能来调用您的API。

您的API应记录上次从您的javascript接听电话的时间戳。有一个cron作业或另一个逻辑来检查特定用户的录音何时停止。最后一个时间戳是用户注销的近似时间。

这是一个非常简单的跟踪用户注销行为的过程。您可能想要考虑是否值得这么麻烦。