【发布时间】:2012-11-02 12:38:50
【问题描述】:
我刚刚创建了一个带有 php 会话的用户登录系统,现在用户可以注册并登录到站点并做其他事情...
现在我想创建 online.php 它将获取所有在线用户。我几乎在 google 和 stackoverflow 中搜索所有内容但没有成功。
好的,现在我想描述一下我想以高性能创建的系统..
当用户登录时,我们只需更新表 user.lastlogin 这是一个时间戳,然后在 online.php 中我们选择 * 每个时间间隔小于 5 分钟的用户。
为此,当用户加载每个页面时,我可以在数据库中更新此时间戳lastlogin 字段,这会花费很多 mysql 查询来完成这项工作......然后在每个页面加载中我必须更新
更新
user设置last=now()
这将花费我很多 mysql 查询。现在我正在寻找另一种方式,例如使用会话或我在 this link 中找到的东西
“通常的解决方案是在表中存储一个时间戳,每次用户执行某项操作时都会更新该时间戳。具有最近时间戳(例如五分钟)的用户显示为已登录,其他所有人都已注销。
它甚至不必在每次页面加载时都更新。在会话中也保留最后一次更新时间的时间戳,并且仅在数据库标志即将到期时更新表。”
但不幸的是,答案并没有太大帮助,我需要一个示例或更多关于此的描述。
【问题讨论】:
-
或者如果有更好的方法。请指导我这样做。
-
您是绑定到 mysql 还是可以添加其他更适合这种情况的数据存储?
-
您的会话是如何存储的?
-
难道没有办法只计算该网站上 PHP 中所有打开的会话服务器端吗?像系统变量一样?顺便说一句,你并不孤单:stackoverflow.com/questions/679657/find-number-of-open-sessions
-
“我们
select *”。如果您担心性能,您可能想要select count(1)。另外,是的,每次网页浏览都会导致一次查询,但是,您实际期望多少次查询?一个查询(尤其是优化的查询)不应成为瓶颈。您可能正步入过早优化的领域。那是个糟糕的地方。
标签: php performance