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

标签 php mysql

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

最佳答案

除非您有一个进程可以定期对您的服务器执行 ping 操作,否则您不能这样做。

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

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

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

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

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

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

您的 API 应记录上次收到来自 JavaScript 的调用的时间戳。有一个 cron 作业或另一段逻辑来检查该特定用户的记录何时停止。最后一个时间戳是用户注销的大约时间。

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

关于php - 有什么解决方案可以在浏览器关闭时更新数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15698947/

相关文章:

php - Mysql 和 PHP - 即使在 "utf8_general_ci"排序规则下,查询也找不到带有重音字符的关键字

javascript - Codeigniter 和 jquery 自动完成

javascript - History.back 然后发送警报在 Chrome 上不起作用

php - 如何在php中获取选定表项的id

php - Mysql错误#1064 创建表

mysql - MySQL连接三张表获取汇总数据

mysql - 使用计数和抑制/忽略组

php - 如何为存储在 session 中的关联数组添加值?

php - 即使使用 jquery 添加了新行,我如何在 ajax 的数据表中添加(数字总和)

mysql - 需要mysql查询来查找经理名称