在我的项目的消息传递系统中,当您收到来自用户的消息时,您会收到一封电子邮件警报,说明另一个用户已发送消息以查看消息,请单击此处(即消息的URL)因此,如果用户未登录在系统中,他会重定向到登录页面,登录后它应该返回到referer url。我在核心文件夹中创建了一个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” 现在问题是我得到referer url直到view_conversation并且无法获得id部分。
有什么建议吗?
谢谢。
答案 0 :(得分:35)
这可以提供帮助:
CI 2+ 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();
}
答案 1 :(得分:16)
答案 2 :(得分:4)
将该代码放入Login 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 );
}
答案 3 :(得分:2)
因为您在网址中有双重问号,浏览器会忽略第二个网址后的网址部分。使用urlencode重定向部分,如下所示:
redirect('user/login?redirect='.urlencode($redirect_to));
我已经测试了它并且它以这种方式工作。
答案 4 :(得分:1)
默认情况下,CI配置为忽略URL的查询部分(“?”之后的部分)。