随着Codeigniter
session
。
我创建了ci_session表。
在此表中,我将session
数据保存在blob
数据类型中。
$sess_data= array(
'logged_in' => TRUE
);
$this->session->set_userdata($sess_data);
为了统计所有在线用户,我需要在logged_in==1
数据类型中获取blob
值。
例如,user 1
已使用Chrome网络浏览器登录。 User2
已登录Mozilla。在database
有2个会话,会话ID不同。
我怎样才能在这个logged_in==1
中获得所有ci_session table
值?
这是我的模特功能。
请帮我填写这个功能的哪个地方?
public function count_online_users(){
$this->db->select('*');
$this->db->from('ci_session');
$this->db->where(...........);
$query = $this->db->get()->num_rows();
return $query;
}
检查这个你必须遵循的方法
首先,您必须将logged_in = 1
表中的users
更新为您定义的名称
在你获得用户数量之后是logged_in
// Update user in to call this function
$data = array(
'logged_in' => '1'
);
public function update_user($user_id, $data)
{
$this->db->where('id',$user_id);
$this->db->update('users',$data);
}
// After you get logged in user in total value
public function count_online_users()
{
$this->db->select('*');
$this->db->from('users');
$this->db->where('logged_in','1');
$query = $this->db->get()->num_rows();
return $query;
}
您可以使用javascript和asynchron请求更新字段。关闭窗口时,会调用window.onunload的处理程序
var unloadHandler = function(e){
//here ajax request to close session
};
window.unload = unloadHandler;
要解决重定向问题,php方面你可以使用一个计数器
class someController extends Controller {
public function methodWithRedirection(){
$this->session->set_userdata('isRedirection', 1);
//here you can redirect
}
}
class homeController extends Controller{
public function closeConnection(){
$this->load->library('session');
if($this->session->userdata('isRedirection')!== 1){
//destroy session
}
}
}