如何查询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
相关产品推荐
相关产品推荐

