Подтвердить что ты не робот

Переадресация на URL-адрес референта в кодеригнере

В системе обмена сообщениями моего проекта, когда вы получаете сообщение от пользователя, вы получаете оповещение по электронной почте о том, что другой пользователь отправил сообщение, чтобы просмотреть сообщение, щелкнув здесь (то есть URL-адрес сообщения). Так, если пользователь не зарегистрирован в систему он перенаправляется на страницу входа в систему, и после входа в систему он должен вернуться к URL-адресу реферирования. Я сделал базовый контроллер в основной папке и расширил 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;
            }
        }
    }

URL-адрес реферала: "http://example.com/project/pm/view_conversation?id=11" теперь проблема в том, что я получаю URL-адрес реферала до view_conversation и не могу получить идентификационную часть.

Любое предложение?

Спасибо.

4b9b3361

Ответ 2

Как насчет просто

redirect($_SERVER['HTTP_REFERER']);

Использование глобальной переменной php $_SERVER.

Это сработало для меня!

Ответ 3

Поскольку у вас есть двойной знак вопроса в URL-адресе, браузер игнорирует часть URL-адреса после второго. Используйте urlencode для перенаправления части, например:

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

Я тестировал его, и он работает таким образом.

Ответ 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 );
}