ruchi
ruchi

Reputation: 17

which function should i use in place of redirect() in codeignitor?

I want user not to jump on my welcome page through URL so. I added session user data in the constructor but redirect is not working showing "ERR_TOO_MANY_REDIRECTS".. so I use header() and site_url and base_url too but not of these are working...

        class Admin extends MY_Controller
        {
        public function __construct()
        {
        parent::__construct();

            if (!$this->session->userdata('userId')) 
            return redirect('admin/index');
        }

            public function index()
            {


                $this->form_validation->set_rules('username', 'Username', 'required|alpha');
                $this->form_validation->set_rules('pass', 'password', 'required|max_length[12]');
                $this->form_validation->set_error_delimiters("<div class='text-danger'>","</div>");
                if($this->form_validation->run())
                {
                    $user=$this->input->post('username');
                    $pass=$this->input->post('pass');
                    $this->load->model('loginmodel');
                    $id=$this->loginmodel->isvalidate($user,$pass);
                    if($id)
                        {

                            $this->load->library('session');
                            $this->session->set_userdata('userId',$id);
                            return redirect('admin/welcome');

                        }
                    else
                        {
                            $this->session->set_flashdata('loginFailed','Invalid Username/password');
                            return redirect('admin/login');
                        }
                }
                else
                {
                    $this->load->view('admin/login');
                }
            }

        }

        ?>

Upvotes: 0

Views: 569

Answers (1)

Dum
Dum

Reputation: 1501

A constructor allows you to initialize an object's properties upon creation of the object. If you create a __construct() function, PHP will automatically call this function when you create an object from a class. (source)

In your code, admin redirect to admin (when the admin initialize, __construct() runs which causes to redirect to admin again.)

My suggestion: check sessions from the index method

public function index(){
    if(!$this->session->userdata('userId')){
       //code
    }else{
       $this->load->view('admin/login');
    }
}

Edit: Thanks to TimBrownlaw

You can redirect to another controller.

redirect('accounts/admin_login');
class Accounts extends MY_Controller {
    public function admin_login(){
        if($this->session->userdata('userId')){
             redirect('admin/index');
        }else{
            $this->load->view('admin/login');
         }
    }
}

Upvotes: 1

Related Questions