重定向到笨引荐网址(Redirect to referer url in codeigniter)

2019-07-30 07:11发布

在我的项目的消息系统,当你从一个用户的消息,你发送一个电子邮件警告说,其他用户发了一个信息给这里查看邮件点击(即帖子的网址),所以如果用户没有在系统登录他得到重定向到登录页面,登录后,它应该回到引荐网址。 我已芯夹在basecontoller和延伸的是CI_Controller认证码如下。

function authenticate($type = 'user')
    {
        if($type == 'user')
        {
            if($this->user_id)
            {
                // user is logged in. check for permissions now
            }
            else
            {
                // user isnt logged in. store the referrer URL in a var.
                if(isset($_SERVER['HTTP_REFERER']))
                {
                    $redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']);
                }
                else
                {
                    $redirect_to = $this->uri->uri_string();
                }            

                redirect('user/login?redirect='.$redirect_to);
                exit;
            }
        }

        if($type == 'admin')
        {
            if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5)
            {
                // Admin is logged in
            }
            else
            {
                redirect('admin/login');
                exit;
            }
        }
    }

引荐网址为“http://example.com/project/pm/view_conversation?id=11”现在的问题是我得到引荐来源网址,直到view_conversation并没有能够得到的ID部分。

任何建议?

谢谢。

Answer 1:

这可以帮助:

C12 + https://www.codeigniter.com/userguide2/libraries/user_agent.html

CI 3+ http://www.codeigniter.com/user_guide/libraries/user_agent.html

$this->load->library('user_agent');
if ($this->agent->is_referral())
{
    echo $this->agent->referrer();
}


Answer 2:

如何只

redirect($_SERVER['HTTP_REFERER']);

使用PHP的$_SERVER全局变量。

这为我工作!



Answer 3:

把这些代码在你登录的Controler

function index() {
    $this->load->library('user_agent');  // load user agent library

    //Set session for the referrer url
    $this->session->set_userdata('referrer_url', $this->agent->referrer() );  
}

登录重定向代码后

// user is authenticated if referrer is there
if( $this->session->userdata('referrer_url') ) {
    //Store in a variable so that can unset the session
    $redirect_back = $this->session->userdata('referrer_url');
    $this->session->unset_userdata('referrer_url');
    redirect( $redirect_back );
}


Answer 4:

因为你在url中有双问号时,浏览器会忽略在第二个之后的URL部分。 使用进行urlencode为您重定向的部分,如下所示:

redirect('user/login?redirect='.urlencode($redirect_to));

我测试了它和它的作品这样。



Answer 5:

默认情况下,CI配置忽略网址的查询部分(后部分“?”)。

请参阅: http://codeigniter.com/user_guide/general/urls.html



文章来源: Redirect to referer url in codeigniter