如何在登录后返回重定向页面(代码点火器)


How to get back to the redirecting page after login (codeigniter)?

我的CI应用程序中有登录控制器:

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.mysitecom/main/function 1/)-该怎么办?

为此,您需要将请求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');
    }
}

然后,您可以使用会话数据重定向回

在的控制器中设置重定向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,
            ));