我正在考虑将CI会话存储在数据库中,这样我就可以显示当前有多少用户在线,谁具体在线等等.
查看http://codeigniter.com/user_guide/libraries/sessions.html,我是否理解信息将存储在表格的user_data列中ci_session?意思是,也许我只是将用户的id存储在那里?
CodeIgniter会将数据存储在您在配置文件中指定的表中.默认情况下,它是ci_session.会话信息($_SESSION例如可通过其访问的内容)被序列化并保存在名为的列中user_data.该字段将无法告诉您会话是否已过期(或换句话说,有多少人在线).
你可以做的是使用last_activity列,这是该会话最后一次活动的时间戳.你可以运行选择的计数的SQL查询session_id,其中last_activity不到2分钟前.
SELECT COUNT(`session_id`) AS `active_user_count` FROM `ci_session` WHERE `last_activity` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MINUTE)
Run Code Online (Sandbox Code Playgroud)
话虽如此,现有会话并不一定意味着用户已"登录".如果您需要检查它们是否已登录,则可以使用LIKE运算符向WHERE检查用户是否已登录的语句添加条件.这将取决于您使用的变量名称,因此请查看数据,看看你是否能搞清楚.
例如:
SELECT COUNT(`session_id`) AS `active_user_count` FROM `ci_session` WHERE `last_activity` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MINUTE) AND `user_data` LIKE '%s:9:"logged_in";b:1;%'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3465 次 |
| 最近记录: |