-2

我正在使用 Javascript、PHP 和 mySQL 编写一个相当复杂的项目管理系统。所有用户都存储在一个 mySQL 表中,当他们登录时,我在 PHP 中设置了一个会话变量并记录了他们上次登录的时间。我这样做只是为了让人们无法通过按 F5 来增加访问次数。

我希望所有登录的用户都能看到当前登录到该站点的所有其他用户的列表。

我能看到解决这个问题的唯一方法是触发一个 PHP 脚本(比如每 10 秒),它会做两件事。将当前用户的当前时间记录到 mySQL 表中,然后查看所有其他用户的最后记录时间。上次登录时间少于当前时间前 20 秒的任何人都将显示为已登录。

我知道如何在 Javascript、Ajax 等中使用计时器来完成所有这些工作,但在我看来,这似乎是一种不太优雅的方式来完成我需要的事情。

我的问题:

这是实现我想要的最佳方式吗

为每个用户每 10 秒发送一次 ajax 调用和更新 mySQL 数据库是一种好的编程习惯吗?

4

2 回答 2

1

我建议您创建一个表“loggedinusers”,其中包含有关当前登录用户的信息。现在,如果您想刷新页面上的列表,您肯定会使用 javascipt,而这必须通过 Ajax 查询和 db 计时器来完成。

另一种解决方案是在页面上有一个 php 模块,当您导航到每个页面时,该模块将查询数据库。因此,当用户浏览您的网站时,您将获得有关新用户登录的信息。我想这很合理。

小表(只有几千个条目)不会影响性能。

于 2013-02-27T12:14:11.533 回答
1

嗯,这取决于架构。

如果此信息仅对您和一些额外的用户可用 - 您可以每 1-2 分钟 grep Varnish / Apache / Nginx 日志(您可以添加一些额外的日志以显示 cookie 等)并将其输出到静态html 页面 - 提供凭据后可用。

这样做的方式有点不同 - 但不会影响平台的性能。

于 2013-02-27T12:14:45.330 回答