无法在CI中创建管理员会话

时间:2016-09-30 17:16:23

标签: php codeigniter session

我想在CodeIgniter中创建一个登录系统。 我在我的控制器中有这个:

public function user_login_process()
{

    $data = array(
        'username' => $this->input->post('username'),
        'password' => $this->input->post('password')
    );
    $result = $this->login_database->login($data);
    if ($result == TRUE) {

        $username = $this->input->post('username');
        $result = $this->login_database->read_user_information($username);
        if ($result != false) {
            $session_data = array(
                'username' => $result[0]->username,
                'email' => $result[0]->email,
            );
            $this->session->set_userdata('logged_in', $session_data);
            if (isset($this->session->userdata['logged_in'])) {
                if( $username="admin"){
                    $result1 = $this->login_database->read_admin_information($username);
                    if ($result1 != false) {
                        $session_data = array(
                            'username' => $result1[0]->username,

                        );
                        $this->session->set_userdata('admin', $session_data);
                        $this->load->view('admin_page');
}}}
            else {
                $this->load->view('home_page');

            }}
    } else {
        $data = array(
            'error_message' => 'Invalid Username or Password'
        );
        $this->load->view('login_form', $data);
    }
    //}

我的模型中有这个:

 public function login($data) {

        $condition = "username =" . "'" . $data['username'] . "' AND " . "password =" . "'" . $data['password'] . "'";
        $this->db->select('*');
        $this->db->from('user');
        $this->db->where($condition);
        $this->db->limit(1);
        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            return true;
        } else {
            return false;
        }
    }

// Read data from database to show data in admin page
    public function read_user_information($username) {//Will read the data for loginn

        $condition = "username =" . "'" . $username . "'";
        $this->db->select('*');
        $this->db->from('user');
        $this->db->where($condition);
        $this->db->limit(1);
        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            return $query->result();
        } else {
            return false;
        }
    }
    public function read_admin_information($username) {//Will read the data for loginn

        $condition = "username =" . "'" . $username . "'";
        $this->db->select('*');
        $this->db->from('user');
        $this->db->where($condition);
        $this->db->limit(1);
        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            return $query->result();
        } else {
            return false;
        }
    }

所以我试图创建一个区分用户的会话,如果它是正常的或者是admin(用户名= admin)。问题是,在我像管理员一样登录后,这总是带我到管理页面。它应该做什么:如果用户不是管理员但是已登录,它应该带我到home_page。

我做错了吗?在我这样做之前,我已经阅读了CI的会话类。有人能帮助我以正确的方式做到这一点吗?谢谢!

2 个答案:

答案 0 :(得分:1)

你不是在比较,你在这里指定:

if( $username="admin"){ // will assign 'admin' to $username

应该是:

if( $username=="admin"){ // will compare $username == 'admin'

答案 1 :(得分:0)

尝试这个先生:(如果你的桌子上有一个usertype)

例如:

  User_Account:(The table)
  User_type(1 is admin)(0 is client)
  ID | First_name | Last_name | Username | Password | User_type 
   1    Michael     Jordan       MJ23       6rings       1
   2    Kobe        Bryant       KB24       5rings       0

MODEL:

  public function login($user,$pass){
       $data = array(
       'Username' => $user,
       'Password' => $pass);

       $query = $this->db->get_where('user_account',$data);
       return $query->result_array(); 
  }

查看:

  <form action="<?php echo base_url(); ?>index.php/My_Controller/login_user" method="post">
     Username: <input type="text" name="username"/><br/>
     Password: <input type="password" name="password"/><br/>
     <button type="submit">LOGIN</button>
  </form>

控制器:

   public function login_user(){
      $user = $this->input->post('username');//this is from the name on input
      $pass = $this->input->post('password');//this is from the name on input

      $result=$this->My_Model->login($user,$pass);

      $usertype = $result["0"]["User_type"];//this is from the database, whenever you login a user which is valid this is what you will use to see what is his User_type

      if($usertype == 1){
            redirect('My_Controller/show_admin');
      } 
      else if($usertype == 0){
            redirect('My_Controller/show_client');
      }
   }

试试这个:如果你有问题只是评论!