【问题标题】:How can i get codeigniter session database blob value?如何获取 codeigniter 会话数据库 blob 值?
【发布时间】:2017-05-16 11:28:03
【问题描述】:

Codeignitersession.
我已经创建了 ci_session 表。
在此表中,我将 session 数据保存为 blob 数据类型。

$sess_data= array(
        'logged_in' => TRUE
);
$this->session->set_userdata($sess_data);

为了统计所有在线用户,我需要在blob 数据类型中获取logged_in==1 值。

例如,user 1 使用 Chrome 网络浏览器登录。 User2 使用 Mozilla 登录。在 database 中有 2 个会话具有不同的会话 ID。

我怎样才能在这个ci_session table 中获得这个所有 logged_in==1 值?

这是我的模型函数。
请帮我填写这个函数的位置?

public function count_online_users(){
$this->db->select('*');
$this->db->from('ci_session');
$this->db->where(...........);
$query = $this->db->get()->num_rows();
return $query;
}

【问题讨论】:

  • 你不能从 ci_session 表中统计登录用户数

标签: codeigniter session blob


【解决方案1】:

勾选这个你必须遵循的方法

首先,您必须将users 表中的logged_in = 1 更新为您定义的名称

你得到的用户数是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 和异步请求更新字段。当你关闭窗口时,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
        }
    }
}  

【讨论】:

  • 您是在建议 OP 在“users”表中添加“logged_in”列?如果会话到期或以其他方式结束而用户未明确注销,您如何建议保持列值有效?
  • 是否可以在blob数据中获取数组值?
  • @omurgokyar 是的,这完全有可能
  • 我实际上在 blob 数据类型的数据列中输入并更新了 logged_in=1 值。但是当我尝试在 blob 数据类型中获取这个数组值时,我遇到了问题。如何在 Codeigniter 中获取 blob 数据类型中的任何数组值。
  • @ImBS CREATE TABLE IF NOT EXISTS ci_sessions ( id varchar(128) NOT NULL, ip_address varchar(45) NOT NULL, timestamp int(10) unsigned DEFAULT 0 NOT NULL, data blob NOT NULL, KEY cisociall_sessions_timestamp (timestamp) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ALTER TABLE ci_sessions ADD PRIMARY KEY (id, ip_address); 这是我的桌子。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2017-04-13
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多