【问题标题】:have any solution to update database when browser close?浏览器关闭时有更新数据库的解决方案吗?
【发布时间】:2023-03-07 17:58:01
【问题描述】:

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

【问题讨论】:

  • 这可能有效。创建一个 cron 作业并检查用户的活动,例如:数据库中的最后一个活动,如果用户在 x 分钟内没有更新,则更改为离线。
  • 无法工作。如果页面刷新也运行onbeforeunload。请给我任何其他解决方案

标签: php mysql


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 谢谢,但我无法得到解决方案。
  • @JD 我不确定您的评论是什么意思。这是否意味着您不理解我写的内容,或者您​​不知道如何实施可能的解决方案?
  • @rexposadas... ya.. 我不知道如何实施可能的解决方案
  • @JD 请看我的编辑。在高层次上,这将是一种可能的解决方案。
  • @rexposadas.. 但我如何知道或检查用户会话的状态。我只设置状态“离线”,会话状态为销毁。
猜你喜欢
  • 2015-03-19
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2020-10-09
  • 2012-09-29
相关资源
最近更新 更多