2012-06-13 44 views
1

我有一個回調函數,檢查我的登錄細節是否正確 - 如果他們錯了,它會返回一個錯誤(這工作正常)。如果細節正確,它應該設置會話$this->session->set_userdata('logged_in',TRUE);,然後繼續使用功能login並重定向到儀表板 - 此重定向工作正常。Codeigniter會話返回310重定向

在我function index(){}上的任何信息板頁面也行

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

我們可以在儀表板/主頁上看到驗證碼嗎? – MikeCruz13

+0

@ MikeCruz13登錄驗證?我沒有任何有關儀表板/家庭的驗證碼,只是查看 –

+0

您是否也可以發佈您的控制器。根據你的控制器的外觀,我的答案可能是錯誤的。 – xbonez

回答

1

這是發生了什麼事。

假設我正確登錄您的登錄控制器,您設置了logged_in = TRUE,並將我重定向到dashboard/home。在index()功能dashboard/home,如果logged_in = TRUE(它是)您將我重定向到dashboard/home再次。再一次,你檢查logged_in = TRUE,並重新導向我,等等等等。

這導致無限重定向循環,導致310錯誤(太多重定向)。

您需要重新進行登錄檢查。在dashboard/homeindex(),這樣做:

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

現在,當我訪問儀表板的家,你只能重定向我走,如果我沒有登錄這家保護您的儀表盤對非認證用戶,而。不會將認證用戶投入無限循環。

0

我覺得你首先應該創建一個MY_Controller要做到這一點,如果有一天您決定將會話變量名稱從logged_in更改爲logged,該怎麼辦?你會打開你所有的控制器並改變它的會話嗎?

創建MY_Controller你將使所有其他控制器,如Home_Controller延長MY_Controller,如:

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

MY_Controller

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

當然,這對你的Login_Controller您將擴展Controller和而不是MY_Controller,否則你將陷入無限循環。