2012-07-07 66 views
12

在我的项目的消息传递系统中,当您收到来自用户的消息时,您会收到一封电子邮件提醒,说另一个用户发送了消息以查看消息,请单击此处(即消息的URL)如果用户没有登录系统,他会重定向到登录页面,登录后它应该回到引用者的URL。我在核心文件夹中创建了一个basecontoller,并且扩展了CI_controller,验证代码如下。重定向到codeigniter中的referer url

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部。

有什么建议吗?

谢谢。

回答

2

因为你必须在url双问号,浏览器在第二个之后忽略url部分。使用urlencode为您重定向的部分,像这样:

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

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

15

如何只

redirect($_SERVER['HTTP_REFERER']); 

使用PHP的$_SERVER全局变量。

这对我有效!

1

把这些代码在你登录的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); 
}