我的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.mysite.com/main/function1/) - 如何操作?
答案 0 :(得分: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');
}
}
...然后您可以使用会话数据重定向回来
答案 1 :(得分:0)
在
的控制器中设置重定向网址$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,
));