我尝试了许多不同的东西来实现这一点,这就是我现在所拥有的:
// save the redirect_back data from referral url (where user first was prior to login)
$this->session->set_userdata('redirect_back', $this->agent->referrer() );
// user is authenticated, lets see if there is a redirect:
if( $this->session->userdata('redirect_back') )
{
$redirect_url = $this->session->userdata('redirect_back'); // grab value and put into a temp variable so we unset the session value
$this->session->unset_userdata('redirect_back');
redirect($redirect_url, 'refresh');
}
else
{
redirect('/', 'refresh');
}
这个问题有时候没有推荐网址。例如,我允许上传视频/图片。如果用户在主页页面上并且他们点击了上传视频按钮并且他们没有登录,则将其重定向到登录页面并刷新并且不再有推荐网址。我希望将用户重定向回上传视频页面,因为他们试图访问此页面,但因为他们没有登录而无法访问。
有谁知道为什么会这样?
答案 0 :(得分:0)
您可以在登录区域的每个控制器的构造函数中解决此问题。例如:
public function __construct() {
parent::__construct();
/*
* First check to see if they are logged in
* if not redirect to login in page with
* redirect back information
*/
if (!$this->session->userdata('uid')) {
redirect(base_url() . 'login?ref=account');
} else {
/*
* if they are logged in, load helpers, models, libs
* and proceed with viewing normally
*/
$this->load->helper('form');
$this->load->library('form_validation');
//etc.
}
}
我在这里使用查询字符串,但您可以轻松使用uri段。然后,登录控制器将获取查询字符串,并在成功登录后使用它将其发回。优点是它们总是重定向回到您希望它们去的位置,因为您总是根据显式代码知道它们的位置。缺点是它需要更多的维护,因为你必须确保你所有的保护"区域具有适当的重定向参数。您可以使用评论中提到的current_url()使其更加灵活。您还必须处理用户可能会弄乱的网址中的数据,但如果您已正确设计其他所有内容,那么这不应该是一个大问题。我喜欢这种方法,因为它明确地让我控制流量,我可以调整每个控制器去我想要的地方并返回我想要的地方。