【问题标题】:How to set userid into a session array in codeigniter?如何在codeigniter中将用户ID设置为会话数组?
【发布时间】:2016-01-21 10:27:18
【问题描述】:

我对 Codeigniter 有点陌生,所以我需要一些帮助,如果你可以在这里发布答案,请。谢谢。

这是我的控制器:

public function login()
{

    $this->load->library('form_validation');

    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|min_length[3]');
    $this->form_validation->set_rules('passwd', 'Passwd', 'required|min_length[3]');

    $data = array();

    if ($this->form_validation->run())
    {
        $email = $this->input->post('email');
        $passwd = $this->input->post('passwd');

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

        if ($this->user_model->check($email, $passwd))
        {

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

            redirect(base_url('/'));
        }
        else
        {
            $data['error'] = 'Wrong e-mail or password.';
        }
    }

    $this->load->view('login', $data);
}

这是我的模型:

public function __construct()
{
    // Call the CI_Model constructor
    parent::__construct();
}

public function check($email = NULL, $password = NULL)
{
    $this->db->select('id');
    $this->db->where('email', $email);
    $this->db->where('password', sha1($password));
    $this->db->limit(1);
    $result = $this->db->get('php_users_login');

    return ($result->num_rows() == 1);
}

我想将用户 ID 放入会话中(数据库结构,如 ID、电子邮件、密码...)

感谢您的帮助!

【问题讨论】:

    标签: php arrays codeigniter session


    【解决方案1】:

    试试这个

    型号

    $this->db->select('id');
    $this->db->where('email', $email);
    $this->db->where('password', sha1($password));
    $this->db->limit(1);
    $result = $this->db->get('php_users_login');
    return   $result->row();
    

    控制器

    $checkData=$this->user_model->check($email, $passwd);
    if(count($checkData)==1){
       $this->session->set_userdata('user_id', $checkData->id);
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      在控制器中

      public function login()
      {
      
          $this->load->library('form_validation');
          $this->load->model('user_model');
      
          $this->form_validation->set_rules('email', 'Email', 'required|valid_email|min_length[3]');
          $this->form_validation->set_rules('passwd', 'Passwd', 'required|min_length[3]');
      
          $data = array();
      
          if ($this->form_validation->run())
          {
              $email = $this->input->post('email');
              $passwd = $this->input->post('passwd');         
      
              $result = $this->user_model->check($email, $passwd);
      
              if ($result == true)
              {
                  $newdata = array(
                     'email'     => $email,
                     'logged_in' => TRUE
                 );
      
                  $this->session->set_userdata($newdata);
      
                  $this->load->view('home', $data); # load view
              }
              else
              {
                  $data['error'] = 'Wrong e-mail or password.';
                  $this->load->view('login', $data);
              }
          }
          else{
              echo "Form validation Error";
          }
      
      }
      

      在模型中

      public function check($email, $password)
      {
      
          $query = $this->db->query("SELECT * FROM php_users_login WHERE email = '$email' AND password = sha1('$password') ");
          $result = $query->result_array();
      
          $count = count($result);
      
          if (empty($count) || $count > 1 ) {
              return false;
          }
          else{
              return true;
          }
      }
      

      【讨论】:

      • 这给了我 else 语句(表单验证错误)
      【解决方案3】:

      你可以在 session 中设置 userid 为:

      在你的模型中使用它:

      public function check($email = NULL, $password = NULL)
      {
          $userid = 0;
          $this->db->select('id');
          $this->db->where('email', $email);
          $this->db->where('password', sha1($password));
          $this->db->limit(1);
          $result = $this->db->get('php_users_login');
      
          if($result->num_rows() == 1){
              $data = $query->result_array();
              $userid = $data[0]['id'];
          }
          return $userid;
      }
      

      在控制器中:

      // if login successfull
      $this->load->model('user_model');
      $userid = $this->user_model->check($email, $passwd);
      if ($userid > 0)
      {
          // session array
          $session_data = array(
                 'session_userid'  => $userid,    
                 'session_email'  => $email
                 );
      
          $this->session->set_userdata($session_data);
          redirect(base_url('/'));
      }
      else
      {
          $data['error'] = 'Wrong e-mail or password.';
      }
      

      旁注:

      我没有看到您的代码中包含会话库,请确保您在 autoload.php 中使用或包含在同一控制器中。

      $this->load->library('session');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多