我想用PHP和AJAX编写一个简单的网络聊天应用程序。保持在PHP登录用户的跟踪
我需要知道所有打开的会话,以便我可以显示可以与之通话的在线用户列表。我还需要注意注销,因为我使用“发送方和接收方都处于脱机状态”作为考虑聊天会话终止并删除消息的条件。
我跟踪数据库中的登录用户:在登录时添加条目并在注销时删除它可以正常工作,但它并不全面,因为用户可以通过其他两种方式进行日志记录out:
- 服务器端会话在非活动状态后过期。
- 客户端Cookie在浏览器关闭时被破坏。似乎使用某种onclose触发的AJAX是一个坏主意(如果浏览器崩溃或什么?)。
最简单的解决方案似乎是保留上次活动的时间戳。我看到,虽然一些问题是:
- AFAIK服务器端过期是基于机会,所以这是不准确的(如果我得到的到期时间3分钟错了,那个的3个几分钟路程一些人可能是与离线用户交谈,想知道为什么没有人会回答)
- 我不得不经常查询数据库以检查每个登录用户上次活动时间与当前时间相比。我没有看到我何时/何地有效地做到这一点。每当需要在线用户列表时,这样做似乎很愚蠢。
任何帮助表示赞赏。我自己编码,因为我不知道任何可以与我现有的用户数据库集成的网络聊天框架,如果我错了,请纠正我。
OK,我意识到其实我并不需要尝试和推测将会时间戳。由于每个用户都在不断地查询新消息,我还可以在每次查询时更新时间戳,并考虑所有时间戳> 20秒的用户不活动。所以现在我只需要弄清楚数据库使用旧时间戳自动删除条目的最佳方式。 – Jonathan
@bfavaretto非常感谢您的注意!程序员似乎是正确的地方要问,会做的。 – Jonathan