【问题标题】:CodeIgniter - adding data to sessionCodeIgniter - 向会话添加数据
【发布时间】:2012-03-13 05:17:27
【问题描述】:

刚开始学习 CodeIgniter 并用它做一个小项目。我一直在尝试向会话添加用户级别,但每次我尝试回显它时,它都不会显示任何内容。这是我的模型代码:

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);

以及显示用户级别的代码 ->

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

谁能帮帮这个菜鸟? :)

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    虽然$this-&gt;session-&gt;userdata['userlevel']; 在技术上是有效的并且可能应该可以工作,但您应该改用userdata() 函数,以防CI 的未来版本将会话类userdata 属性声明为protectedprivate

    $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) 在将其传递到会话之前,以确保它是您认为的那样,并始终确保 error_reporting() 处于全力以赴的状态。

    【讨论】:

      【解决方案2】:

      使用括号访问“用户数据”并将其分配给一个数组,以便能够使用它所包含的内容。

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

      【讨论】:

      • isset($this-&gt;session-&gt;userdata('userlevel')) 始终为TRUE,因为该函数返回值或FALSE。这是一种调试技术,与其说是解决方案,还不如压缩成var_dump($this-&gt;session-&gt;all_userdata())
      • 你是对的 isset() 认为这是一个错误输入,至于 var_dump() 我只是想向他展示如何访问他的 userdata() 数组。 var_dump($this-&gt;session-&gt;all_userdata()) 返回所有他现在不需要的 userdata()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2011-01-05
      • 2015-10-27
      相关资源
      最近更新 更多