【问题标题】:Redirect to referer url in codeigniter重定向到 codeigniter 中的引用 url
【发布时间】:2012-07-07 15:41:19
【问题描述】:

在我的项目的消息系统中,当您收到来自用户的消息时,您会收到一封电子邮件警报,说另一个用户已发送消息以查看消息,请单击此处(即消息的 url)因此,如果用户未登录在系统中,他被重定向到登录页面,登录后它应该返回到引用 URL。我在core文件夹中做了一个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 之前获取引用 url 并且无法获取 id 部分。

有什么建议吗?

谢谢。

【问题讨论】:

    标签: php codeigniter http-referer


    【解决方案1】:

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

    见:http://codeigniter.com/user_guide/general/urls.html

    【讨论】:

      【解决方案2】:

      这会有所帮助:

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

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

      以下解决方案适用于 Codeigniter 版本 3

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

      更新:有关如何使用相同的 user_agent 库获取引荐来源信息的有趣且有用的信息
      https://www.tutorialandexample.com/user-agent-class/

      【讨论】:

        【解决方案3】:

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

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

        我已经测试过了,它是这样工作的。

        【讨论】:

          【解决方案4】:

          怎么样

          redirect($_SERVER['HTTP_REFERER']);
          

          使用 php 的 $_SERVER 全局变量。

          这对我有用!

          【讨论】:

            【解决方案5】:

            将该代码放入您的登录控制器中

            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 );
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-09-16
              • 2014-04-16
              • 1970-01-01
              • 1970-01-01
              • 2020-06-14
              • 2018-01-22
              • 2013-04-30
              相关资源
              最近更新 更多