2012-08-30 47 views
5

我在CI的應用程序登錄控制器:登錄後如何返回重定向頁面(codeigniter)?

function index() 
{ 
    if($this->session->userdata('logged_in')==TRUE) 
     redirect('/success'); 

    $data['error']=$this->session->flashdata('errormessage'); 
    $this->load->view('auth',$data); 
} 

function process_login() 
{ 

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

    if($password == "good_pwd") 
    { 
    $data=array('username'=>$username,'logged_in'=>TRUE); 
    $this->session->set_userdata($data); 
    redirect('/success'); 
    } 
    else 
    { 
     $this->session->set_flashdata('errormessage','Login failed'); 
     redirect('/failed'); 
    } 
} 

那是我的主控制器固定構造:

function __construct() 
{ 
    parent::__construct(); 
    if($this->session->userdata('logged_in')!=TRUE) redirect('/login'); 
} 

當我試圖進入www.mysite.com/main/function1 /我沒有登錄,然後構造函數重定向到登錄頁面 - 當我登錄正確的我被重定向到主頁面,而不是重定向到登錄頁面的頁面(在本例中爲:www.mysite。 com/main/function1 /) - 怎麼做?

+0

可能的重複http://stackoverflow.com/questions/8625556/redirect-to-original-page-after-logging-in-codeigniter – 2012-08-30 09:55:52

回答

20

你需要你的請求URI存儲在這個會話,這樣你就可以沿着線返回到前一個頁面,東西:

function __construct() 
{ 
    parent::__construct(); 
    if($this->session->userdata('logged_in')!=TRUE) { 
     $this->load->helper('url'); 
     $this->session->set_userdata('last_page', current_url()); 
     redirect('/login'); 
    } 
} 

...那麼你可以使用會話數據到後面重定向

+0

這可能是更好的使用GET參數,因爲會話可以持續很長時間(例如,如果用戶決定終究不連接)。 –

+0

可能,但CodeIgniter中的會話正在被自動清除2.用空白參數創建,即使用戶只進入頁面並且什麼也不做 –

0

設置重定向URL在

$redirect_to = "where you want to redirect after login"; 
$this->session->set_userdata('redirect_to',$redirect_to); 

用一些這樣的事的控制器在用戶控制器

$redirect_to = $this->input->post('redirect_to') ? $this->input->post('redirect_to') : $this->session->userdata('redirect_to'); 

    $this->template->build('login', array(
       '_user' => $user, 
       'redirect_to' => $redirect_to, 
      )); 
相關問題