CodeIgniter - 向会话添加数据

时间:2012-03-12 18:12:34

标签: php codeigniter session

刚开始学习CodeIgniter并用它做一个小项目。我一直在尝试为会话添加一个userlevel,但每当我尝试回显它时,它都不会显示任何内容。继承我的模型代码:

function get_userlevel($username){
        $this->db->where('username',$username);
        $query = $this->db->get('users');
        foreach($query->result() as $row){
            $rows[] = $row;
        }
        return $rows;
}

我的控制器代码:

$userlevel['records'] = $this->membership_model->get_userlevel($this->input->post('username'));

            $data = array(
                'username' => $this->input->post('username'),
                'userlevel' => $records['userlevel'],
                'logged_in' => true
            );

            $this->session->set_userdata($data);

显示userlevel的代码 - >

<?php echo $this->session->userdata['userlevel'] ; ?>

任何人都可以帮助这个noobie吗? :)

2 个答案:

答案 0 :(得分:0)

虽然$this->session->userdata['userlevel'];在技术上有效并且可能应该有效,但您应该使用userdata()函数,以防将来的CI版本将Session类userdata属性声明为{{1 }或protected

private

更重要的是,您的模型试图找到太多结果并返回一组结果,而不仅仅是一个。试试这个:

$this->session->userdata('userlevel');

function get_userlevel($username){ $query = $this->db ->where('username', $username) ->limit(1) ->get('users'); return $query->row(); } 会返回一行或row()。在构建多行数组之前(尽管只有一行)。我认为这是你问题的根源。

此外,您的代码中存在一点诵读困难。你没有使用正确的变量。您在为会话分配FALSE时将模型的结果分配给$userlevel['records']

为了将来调试$records['userlevel'],然后将其传递到会话中以确保它符合您的想法,并始终确保var_dump($data)完全爆炸。

答案 1 :(得分:0)

使用括号访问'userdata'并将其分配给数组,以便能够处理它所拥有的内容。

<?php  
if($this->session->userdata('userlevel')) {
    $arr = $this->session->userdata('userlevel');
    var_dump($arr['username']);
    var_dump($arr['userlevel']);
    var_dump($arr['logged_in']);
}
?>