0

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

4

1 回答 1

1

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

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

@Antony 给出了一个可能的解决方案。

另一种可能的解决方案是在给定的时间间隔向您的服务器发送消息。服务器应该期待这个调用。如果服务器没有收到消息,则将用户标记为已注销。它的缺点是注销时间戳被间隔关闭。注销时间将不准确。有关使用计时器的 Ajax 调用的更多详细信息,请参阅此线程

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

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

在您的情况下,使用此函数来调用您的 API。

您的 API 应记录上次从您的 javascript 收到调用的时间戳。有一个 cron 作业或其他逻辑来检查该特定用户的录制何时停止。最后一个时间戳将是用户注销的大致时间。

这是一个非常复杂的过程,用于简单地跟踪用户的注销行为。您可能需要考虑是否值得麻烦。

于 2013-03-29T07:25:45.747 回答