我刚刚用php会话创建了一个用户登录系统,现在用户可以注册并登录网站并做其他事情......
现在我想创建online.php,它将获取所有在线用户。我几乎搜索google和stackoverflow中的所有内容,但没有成功。
好吧现在我想描述一下我想用高性能创建的系统..
当用户登录时,我们只更新表user
。lastlogin
这是一个时间戳,然后在online.php中我们SELECT *每个用户,其中时间间隔是< 5分钟。
为此,我可以在用户加载每个页面时更新数据库中的这个时间戳lastlogin
字段,这需要花费很多mysql查询来完成这项工作...然后在每个页面加载我必须更新
更新
user
设置last
= now()
这将花费我很多mysql查询。现在我正在寻找另一种方式,如使用会话或我在this link中找到的东西
“正常的解决方案是在表格中存储一个时间戳,每次用户执行操作时都会更新。具有最近时间戳(例如,五分钟)的用户显示为已登录,其他人都已注销。
甚至不需要在每个页面加载时更新它。在会话中保留时间戳以及上次更新时间,并且仅在数据库标志即将到期时更新表。“
但不幸的是,答案并不是很有帮助,我需要一个例子或更多的描述。
答案 0 :(得分:1)
1。)如果您需要更快的会话速度,例如 memcache 。一个简单的键值存储,用于保存会话或密钥。您可以配置Apache,所有会话将自动存储在memcache中。
2。)另一个解决方案是创建一个MySQL保存在RAM中的 MEMORY Table 。问题是当您重新启动服务器时,此表中的数据将丢失。但我认为在你的情况下,上次登录没有问题。
3。) PHP共享内存:http://php.net/manual/de/ref.shmop.php用于小数据。
当您实施解决方案时,我更喜欢 MEMORY表或SHM解决方案。
修改:在硬盘上搜索的最后一段与顶部的评论相关:Find Number of Open Sessions