You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询ci_sessions表统计在线用户数量?

嘿,我来帮你搞定这个CodeIgniter在线用户统计的问题!

统计ci_sessions表中在线用户数的正确姿势

先帮你理清问题根源:你之前单纯靠时间戳查询没得到有效结果,是因为__ci_last_regenerate只是会话最后一次更新的时间戳,真正标记用户是否处于登录状态的是data字段里的logged_in|b:1标识——从你给出的登出后data内容也能看到,登出后这个登录标识会被移除,只剩会话再生时间。

核心查询思路

要准确统计在线用户,需要同时满足两个条件:

  • 会话未过期(结合你的会话过期配置,筛选出近期活跃的会话)
  • data字段中存在logged_in|b:1(用户处于登录状态)

具体SQL查询语句

假设你的会话过期时间是默认的7200秒(2小时),可以用这条查询:

SELECT COUNT(DISTINCT user_id) AS online_user_count
FROM ci_sessions
WHERE timestamp >= UNIX_TIMESTAMP(NOW()) - 7200
AND data LIKE '%logged_in|b:1%';
  • COUNT(DISTINCT user_id):避免同一个用户开多个会话导致重复统计
  • timestamp >= UNIX_TIMESTAMP(NOW()) - 7200:筛选出最近2小时内活跃的有效会话
  • data LIKE '%logged_in|b:1%':确保用户处于登录状态

额外注意事项

  • 如果你的会话过期时间不是2小时,把7200改成CodeIgniter配置文件中$config['sess_expiration']对应的数值(单位:秒)
  • 从你给出的登出后data内容来看,登出操作确实会移除登录相关字段,所以这个判断逻辑是完全可靠的
  • 要是你需要更精准的活跃时间统计,可以结合__ci_last_regenerate字段,但前提是你的应用会定期触发会话再生(CodeIgniter默认会自动处理这件事)

内容的提问来源于stack exchange,提问作者Hussain Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:38