Reputation: 17
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
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