【问题标题】:Codeigniter object in session?会话中的 Codeigniter 对象?
【发布时间】:2010-09-04 18:44:09
【问题描述】:

我从 CI 开始,有些东西我不明白。 我正在写这个登录页面,我想将用户对象添加到会话中。我怎么做?用户对象来自我的用户模型.. 对于我写的一个新实例:

$this->load->model('user_model', 'user');

但这不起作用:

$this->session->set_userdata('userobject', $this->user);

任何想法如何做到这一点?

【问题讨论】:

  • 最好避免在会话中存储任何模型对象(主要是由于加载原因)。另一个问题是,当用户访问一个页面时,您几乎总是希望在另一个选项卡中检查他们是否被禁止或更新:) 我通常只存储用户的 ID 并在每个页面上查询数据库。跨度>
  • 为什么需要同一模型的两个实例?
  • 所以我可以比较这些对象将是一个例子......我想将对象添加到会话中,它更实用 imo,但如果我找不到怎么做我'将使用用户 ID

标签: php session codeigniter model


【解决方案1】:

用户模型中创建一个函数来检索您要添加到会话的用户数据:

function get_user_data($id){
    //example query
    $query = $this->db->get_where('mytable', array('id' => $id));
    //might wanna check the data more than this but...
    if ($query->num_rows() > 0){
        return $query->row_array();
    }
    else{
        return false;
    }
}

控制器中:

$this->load->model('user_model', 'user');
$user_data = $this->user->get_user_data($id);
if(!empty($user_data)){
    $this->session->set_userdata($user_data);
}

【讨论】:

  • 我什至没有想到使用数组,我在想我班上的一个实例。谢谢。
  • 只保存数据 = 不能使用对象的功能。
【解决方案2】:

序列化你的模型怎么样;-)

$this->session->set_userdata('userobject', serialize($this->user));

然后在获取时反序列化它。但是,请注意 CI 会话,它不使用原生 PHP 会话,它使用了有限大小的 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多