gpt4 book ai didi

php - 在 PHP 中跟踪登录用户

转载 作者:可可西里 更新时间:2023-11-01 13:28:48 24 4
gpt4 key购买 nike

我正在尝试使用 PHP 和 AJAX 编写一个简单的网络聊天应用程序。

我需要了解所有打开的 session ,以便我可以显示可以与之交谈的在线用户列表。我还需要注意注销,因为我使用“发送方和接收方都离线”作为考虑聊天 session 终止和删除消息的条件。

我在数据库中跟踪登录用户:在登录时添加一个条目并在注销时删除它工作正常,但它并不全面,因为用户可以通过其他两种方式注销:

  • 服务器端 session 在不活动后过期。
  • 客户端 cookie 在浏览器关闭时被销毁。使用某种 onclose 触发的 AJAX 似乎是个坏主意(如果浏览器崩溃或其他什么怎么办?)。

最简单的解决方案似乎是保留上次事件的时间戳。不过,我看到了一些问题:

  • AFAIK 服务器端过期是基于机会的,所以它不会准确(如果我把过期时间弄错了 3 分钟,那就是 3 分钟,有些人可能正在与离线用户交谈,想知道为什么没有人接听)
  • 我必须经常查询数据库以检查每个登录用户的上次事件时间与当前时间的比较。我不知道何时/何地可以有效地执行此操作。每次需要在线用户列表时都这样做似乎很愚蠢。

感谢任何帮助。我正在自己编写代码,因为我不知道有任何网络聊天框架可以与我现有的用户数据库集成,如果我错了请纠正我。

最佳答案

我认为您无法通过关闭浏览器、互联网连接问题等方式减轻不断查询以确定用户是否已注销的情况,但您或许可以让每个客户端每 5 秒向服务器发送一次 AJAX 请求以更新上次事件时间,如果用户连续错过 3-4 次请求(即他们的上次事件时间 > 20 秒),则服务器上的应用程序会认为用户“已注销” ).

在客户端,您可以在每次客户端向另一个用户发送消息时检查上次事件时间,并在发生这种情况时回复他们已注销。如果他们试图打开与另一个用户的聊天,您也可以立即调用电话以检查他们的状态。然后您可以每 30 秒检查一次用户列表中所有用户的状态。这样,如果与他聊天的人意外掉线,您的客户会很快得到反馈。

关于php - 在 PHP 中跟踪登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com