2012-06-13 3 views
1

로그인 정보가 올바른지 확인하는 콜백 기능이 있습니다. 오류가 있으면 오류가 반환됩니다 (정상적으로 작동합니다). 세부 정보가 정확하면 세션을 $this->session->set_userdata('logged_in',TRUE);으로 설정하고 login 기능을 계속 수행하고 대시 보드로 리디렉션하십시오.이 리디렉션이 정상적으로 작동합니다. 어떤 대시 보드 페이지에 내 function index(){}에서Codeigniter 310 리디렉션 세션 반환

if($this->session->userdata('logged_in')) redirect('dashboard/home');

위의 라인 내 310 리디렉션을 하나의 원인이되는 라인을 가지고 있지만 그 이유를 확실 해요?

나는 사용자가 dashboard/home로 리디렉션에 로그인되어 있는지 확인하고자하는 다른 로그인 페이지로 다시 이동하고 home/login

컨트롤러 :

class Home extends CI_Controller { 

    function __construct() { 
      parent::__construct(); 
     }  

    public function index() 
    { 
     //if($this->session->userdata('logged_in')) redirect('dashboard/home'); 

     $data['contentMangement'] = $this->options_model->systemOptions(); 
     $data['pageTitle'] = 'Login'; 
     $data['message'] = ""; 
     $this->load->view('_assets/header', $data); 
     $this->load->view('login', $data); 
     $this->load->view('_assets/footer'); 
    } 

    public function login() { 
      $this->form_validation->set_rules('userEmail','Username', 'required|valid_email|trim|max_length[99]|xss_clean'); 
      $this->form_validation->set_rules('userPassword','Password', 'required|trim|max_length[200]|xss_clean|callback__checkUsernamePassword'); 

      if($this->form_validation->run() === FALSE) { 

       $data['contentMangement'] = $this->options_model->systemOptions(); 
       $data['pageTitle'] = 'Login'; 
       $data['message'] = validation_errors('<div class="alert alert-error">', '</div>'); 
       $this->load->view('_assets/header', $data); 
       $this->load->view('login', $data); 
       $this->load->view('_assets/footer'); 

      }elseif($this->form_validation->run() === TRUE){ 

      redirect('dashboard/home'); 
     } 
    } 


    function _checkUsernamePassword() { 

      $username = $this->input->post('userEmail'); 
      $password = $this->input->post('userPassword'); 

      $user = $this->user_model->check_login($username,$password); 

      if(! $user) 
      { 
       $this->form_validation->set_message('_checkUsernamePassword', 'Sorry the details you provided have not been found'); 
       return FALSE; 
      }else{ 
       $this->session->set_userdata('logged_in',TRUE); 
       return TRUE; 
      } 
    } 
} 
+0

dashboard/home에서 유효성 검사 코드를 볼 수 있습니까? – MikeCruz13

+0

@ MikeCruz13 로그인 확인이 필요하십니까? 대시 보드/집에 대한 유효성 검사 코드가 없습니다. –

+0

컨트롤러를 게시 할 수도 있습니까? 귀하의 컨트롤러가 어떻게 생겼는지에 따라 내 대답이 잘못되었을 수 있습니다. – xbonez

답변

1

다음과 같은 현상이 발생합니다.

로그인 컨트롤러에서 logged_in = TRUE을 올바르게 설정하고 dashboard/home으로 리디렉션한다고 가정합니다. index()의 기능이 dashboard/home 인 경우 logged_in = TRUE (해당) 인 경우 다시 dashboard/home으로 리디렉션됩니다. 다시 한번 logged_in = TRUE을 확인하고 다시 리디렉션하는 식으로 진행합니다.

이로 인해 310 오류 (너무 많은 리디렉션)가 발생하는 무한 리디렉션 루프가 발생합니다.

로그인 확인을 다시해야합니다. dashboard/home에서 index()에서이 작업을 수행 : 내가 대시 보드 가정을 방문 할 때 내가 로그인 아니에요 경우

if ($this->session->userdata('logged_in') === FALSE) redirect(site_url('dashboard/login'));

이제

는, 당신은 날 멀리 리디렉션이 인증되지 않은 사용자에 대한 홈 대시 보드를 보호하면서. 인증 된 사용자를 무한 루프에 던지지는 않습니다.

0

난 당신이 먼저 MY_Controller를 작성해야한다고 생각 언젠가 세션 변수 이름을 logged_in에서 logged으로 변경하기로 결정했다면 어떨까요? 모든 컨트롤러를 열고 세션을 변경 하시겠습니까?

처럼 MY_Controller을 확장 MY_Controller 당신이 Home_Controller처럼, 모든 다른 컨트롤러를 만들 것입니다 만들기 :

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

귀하의 MY_Controller : 당신의 Login_Controller 당신이 Controller을 확장 할에 물론

//under /application/core/ 
class MY_Controller extends Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    if(!$this->session->userdata('logged_in')) 
     redirect('login'); 
    } 
} 

MY_Controller이 아니면 무한 루프에 빠질 수 있습니다.