В системе обмена сообщениями моего проекта, когда вы получаете сообщение от пользователя, вы получаете оповещение по электронной почте о том, что другой пользователь отправил сообщение, чтобы просмотреть сообщение, нажмите здесь (то есть 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-адрес реферала до просмотра_сочетания и не могу получить идентификационную часть.
Любое предложение ?
Спасибо.
Это может помочь:
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(); }
Как насчет просто
redirect($_SERVER['HTTP_REFERER']);
Использование глобальной переменной php $_SERVER
.
Это сработало для меня!
Поскольку у вас есть двойной знак вопроса в URL-адресе, браузер игнорирует часть URL-адреса после второго. Используйте urlencode для переадресации части, например:
redirect('user/login?redirect='.urlencode($redirect_to));
Я проверил его, и он работает таким образом.
По умолчанию CI настроен на игнорирование части запроса URL-адреса (часть после «?»).
Поместите этот код в свой логин
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 ); }