Проблема с концепцией аутентификации CodeIgniter

#php #codeigniter #authentication

#php #codeigniter #аутентификация

Вопрос:

Я создал контроллер аутентификации CI, позволяющий пользователю входить на сайт, и после входа в систему я перенаправляю его на ранее посещенный URL-адрес, который я продолжаю использовать:

 $this->session->set_flashdata( 'return_url', current_url() );
  

К сожалению, это вызывает проблему. Каждый раз, когда пользователь открывает более одной вкладки в браузере, эта переменная перезаписывается, и после успешного входа в систему пользователь перенаправляется на один и тот же URL-адрес во всех вкладках.

Итак, мой вопрос: возможно ли загрузить пользовательский контроллер внутри MY_Controller?( MY_Controller это класс, который extends CI_Controller )

Я попытался использовать (внутри конструктора MY_Controller ), но это не сработало:

 $CI =amp; get_instance();
$CI->router->set_class('authentication');
$CI->router->set_method('login');
  

Редактировать: я буду признателен за любые другие идеи по решению этой проблемы.

Комментарии:

1. Нет, в CI вы не можете вызвать контроллер с другим.

2. Почему бы не использовать автоматически загружаемую модель для аутентификации? Я написал свою систему аутентификации как модель и загрузил ее автоматически, и у меня никогда не было проблем. Я даже определяю определения в методе construct, что даже делает мой код более аккуратным и удобным для чтения.

Ответ №1:

решением было бы не сохранять URL-адрес возврата в переменной сеанса, а передавать его в параметре get / post (в случае get, правильно закодированный, base64 ie.). Единственным дополнением должен быть стандартный URL-адрес возврата, если не задан (допустимый) URL-адрес возврата

— РЕДАКТИРОВАТЬ почему я говорил о base64, когда в php есть только функция для этого; urlencode — ваш друг! http://nl3.php.net/urlencode

Комментарии:

1. base64 хэш-код содержит косые черты и не соответствует URL-адресу codeigniter

2. Мне удалось избежать этой проблемы с косой чертой, заменив все косые черты восклицательным знаком в хэше после кодирования и изменив их перед декодированием строки.

Ответ №2:

Чтобы загрузить пользовательский контроллер внутри контроллера (например, MY_Controller), используйте php CURL для доступа к контроллеру аутентификации.

Это может повлиять на производительность, поскольку это дорогостоящий процесс для каждого запроса.

Другие варианты могут включать использование системы базовых классов (см. http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY ) или создание автоматически загружаемой библиотеки для обеспечения аутентификации.

Ответ №3:

Когда вы перенаправляете незарегистрированных пользователей на страницу входа в систему, сохраните скрытую переменную «redirect_to», которая будет содержать значение оттуда, откуда прибыл пользователь. можно использовать $ _SERVER[‘HTTP_REFERRER’]. Затем после входа в систему просто перенаправьте на значение «redirect_to». Таким образом, вам не нужно настраивать flashdata для перенаправления пользователей с URL, с которого они пришли.

Комментарии:

1. Это $_SERVER['HTTP_REFERER'] и не может быть использовано, когда вы перенаправили пользователя с помощью заголовка php