Я хочу знать, есть ли способ, с помощью которого я могу ограничить доступ к своим функциям контроллера через URL. Но я хочу дать им звонок по моей ссылке на сайте. Например, если у меня есть ссылка на моем сайте, которая указывает на функцию контроллера:
<a href='test/function'>Call me</a>
Но я не хочу, чтобы функция контроллера вызывалась, когда я помещаю вышеуказанный URL в адресную строку браузера. Может кто-нибудь помочь с этим?
Как вы сказали в комментарии, если вы хотите загрузить ссылку через AJAX:
Ваша разметка:
<a href="test/function" data-key="abc">
Ваш jquery:
$('a').on('click',function(){ var data = $(this).data('key'); $('#result').load($(this).attr("href") + '?key=' + data); });
Затем в контроллере CodeIgniter вы проверяете, присутствует ли ваш ключ и соответствует ли он («abc»), иначе вы вернете 403 или что-то похожее.
Кроме того, вы можете, конечно, проверить $_SERVER['HTTP_REFERER']
чтобы узнать, откуда пришел пользователь (это, однако, довольно легко подделано) и разрешать доступ только тогда, когда GET-запрос сделан с вашего собственного сайта.
Это невозможно. Apache и, следовательно, CodeIgniter, позволяют доступ к вашему скрипту PHP во внешний мир, будь то вручную введенный URL-адрес браузера или через посещенную гиперссылку. Оба сценария подключаются к вашему веб-приложению точно так же, но они просто добираются туда по-другому .
Вы можете разрешить доступ только к вашим сценариям CodeIgniter (то есть запретить публичным пользователям доступ к контроллеру), используя:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Как отметил Маркус, вы можете использовать что-то вроде:
if (!$_SERVER['HTTP_REFERER']) $this->redirect('/home');
Но это часто очень непоследовательно.
Решение: поместите этот код в начале каждого метода контроллера
if (defined('BASEPATH') && !$this->input->is_ajax_request()) exit('No direct script access allowed');
Это действительно помогло. Я также добавил это как дополнительную проверку
$allowed_host = gethostname(); $host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); if(substr($host, 0 - strlen($allowed_host)) != $allowed_host) $this->redirect('/home');`
In view: `<input type="hidden" value="1" name="back">` put inside your function in Controller: if(($this->input->post('back'))==1) { echo " what you want do here"; } else { $this->load->view('template',array('welcome_page')) ; }
подтвердите форму, которую вы положите внутри этого условия if. Это определенно сработает.