Параметры GET в URL с помощью CodeIgniter

Я знаю, что codeIgniter по умолчанию отключает параметры GET.

Но, сделав все в POST, разве вас не раздражают запросы на повторную отправку данных, если вы когда-нибудь нажмете назад после отправки формы?

Меня это раздражает, но я не уверен, хочу ли я разрешить GET только по этой причине.

Разве разрешение GET-параметров - такая большая проблема безопасности?

Начиная с CodeIgniter 2.x, параметры GET теперь по умолчанию равны включено.

Matt Browne 07.04.2013 19:29
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
49
1
177 804
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Параметры GET кэшируются веб-браузером, POST - нет. Таким образом, с POST вам не нужно беспокоиться о кешировании, поэтому обычно его предпочитают.

Но если вам нужен GET, вам нужен GET, как насчет закладок, каналов и тому подобного?

Lorenzo 06.04.2009 17:30

Это все в порядке, но вы должны понимать, что браузер может кэшировать эти запросы GET, если не добавлены правильные заголовки.

Nick Berardi 07.04.2009 04:24

ИМО, отсутствие GET - один из самых больших недостатков CI. GET - это ключевой аспект HTTP, и его следует использовать соответствующим образом. Кеширование - это вещь хорошо!

pbreitenbach 04.07.2009 04:11
Ответ принят как подходящий

Когда я впервые начал работать с CodeIgniter, отказ от GET меня тоже сбил с толку. Но потом я понял, что вы можете моделировать параметры GET, манипулируя URI с помощью встроенного Класс URI. Это фантастика, и благодаря ей ваши URL-адреса выглядят лучше.

Или, если вам действительно нужна работа GET, вы можете поместить это в свой контроллер:

parse_str($_SERVER['QUERY_STRING'], $_GET); 

Это вернет переменные в массив GET.

да - с тем, как CodeIgniter обрабатывает URL-адреса по умолчанию, дополнительные сегменты в URI действуют как параметры для методов вашего контроллера.

Steven Oxley 08.12.2008 14:40

Этот метод работает, если вы переключитесь на $ config ['uri_protocol'] = 'PATH_INFO']; в противном случае? foo = bar & baz = meh превратится в / foo / baz.

Phil Sturgeon 22.06.2010 19:03

Я создаю приложение facebook, и я планирую подписаться на обновления facebook, поддерживаемые api графика. Для этого требуется параметр GET. developers.facebook.com/docs/reference/api/realtime

Casey Flynn 23.07.2011 06:40

для этого кода необходимо добавить $ config ['uri_protocol'] = "PATH_INFO"; в config.php

Maulik patel 28.03.2012 15:53

Помощник по URL-адресу «Файл помощника по URL-адресу содержит функции, помогающие работать с URL-адресами». ellislab.com/codeigniter/user-guide/helpers/url_helper.html

user1502852 28.12.2012 00:26

allesklar: Это немного вводит в заблуждение, так как скрипты и боты могут отправлять данные POST почти так же легко, как отправка обычного запроса. Ни для кого не секрет, это часть HTTP.

Еще проще:

curl -X POST -d "param=value&param2=value" http://example.com/form.cgi

хотя этот плагин довольно крутой.

"разве вас не раздражают запросы на повторную отправку данных, если вы когда-нибудь нажмете назад после отправки формы"

вы можете обойти это, выполнив перенаправление со страницы, которая обрабатывает отправку вашей формы, на страницу успеха. последним «действием» была загрузка успешной страницы, а не отправка формы, что означает, что если пользователи нажимают F5, она просто перезагружает эту страницу и больше не отправляет форму.

Отлично, спасибо! С тех пор я узнал об этом, но да, это хороший совет.

Jon Winstanley 13.08.2009 18:36

Немного не по теме, но я искал функцию get в CodeIgniter, чтобы просто передавать некоторые переменные между контроллерами и сталкиваться с Flashdata.
см .: http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata позволяет быстро создавать данные сеанса, которые будут доступны только для следующего запроса сервера, а затем автоматически удаляются.

parse_str($_SERVER['QUERY_STRING'],$_GET); У меня сработало ТОЛЬКО после того, как я добавил следующую строку в applications / config / config.php:

$config['uri_protocol'] = "PATH_INFO";

Я обнаружил, что параметры $ _GET не нужны в CI, но Facebook и другие сайты сбрасывают параметры GET в конец ссылок, что было бы 404 для моего сайта CI !! Добавив строку выше в config.php, эти страницы заработали. Надеюсь, это поможет людям!

(из https://web.archive.org/web/20101227060818/http://www.maheshchari.com/work-to-get-method-on-codeigniter/)

MY_Input.php:

<?php
// this class extension allows for $_GET access
class MY_Input extends CI_input {

    function _sanitize_globals()
    {
        // setting allow_get_array to true is the only real modification
        $this->allow_get_array = TRUE;

        parent::_sanitize_globals();
    }

}
/* End of file MY_Input.php */
/* Location: .application/libraries/MY_Input.php */

MY_URI.php:

<?php
/*
 | this class extension allows for $_GET access by retaining the
 | standard functionality of allowing query strings to build the 
 | URI String, but checks if enable_query_strings is TRUE
*/
class MY_URI extends CI_URI{

    function _fetch_uri_string()
    {
        if (strtoupper($this->config->item('uri_protocol')) == 'AUTO')
        {
            // If the URL has a question mark then it's simplest to just
            // build the URI string from the zero index of the $_GET array.
            // This avoids having to deal with $_SERVER variables, which
            // can be unreliable in some environments
            //
            //  *** THE ONLY MODIFICATION (EXTENSION) TO THIS METHOD IS TO CHECK 
            //      IF enable_query_strings IS TRUE IN THE LINE BELOW ***
            if ($this->config->item('enable_query_strings') === TRUE && is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
            {
                $this->uri_string = key($_GET);
                return;
            }

            // Is there a PATH_INFO variable?
            // Note: some servers seem to have trouble with getenv() so we'll test it two ways
            $path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
            if (trim($path, '/') != '' && $path != "/".SELF)
            {
                $this->uri_string = $path;
                return;
            }

            // No PATH_INFO?... What about QUERY_STRING?
            $path =  (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
            if (trim($path, '/') != '')
            {
                $this->uri_string = $path;
                return;
            }

            // No QUERY_STRING?... Maybe the ORIG_PATH_INFO variable exists?
            $path = str_replace($_SERVER['SCRIPT_NAME'], '', (isset($_SERVER['ORIG_PATH_INFO'])) ? $_SERVER['ORIG_PATH_INFO'] : @getenv('ORIG_PATH_INFO'));
            if (trim($path, '/') != '' && $path != "/".SELF)
            {
                // remove path and script information so we have good URI data
                $this->uri_string = $path;
                return;
            }

            // We've exhausted all our options...
            $this->uri_string = '';
        }
        else
        {
            $uri = strtoupper($this->config->item('uri_protocol'));

            if ($uri == 'REQUEST_URI')
            {
                $this->uri_string = $this->_parse_request_uri();
                return;
            }

            $this->uri_string = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri);
        }

        // If the URI contains only a slash we'll kill it
        if ($this->uri_string == '/')
        {
            $this->uri_string = '';
        }
    }

}
/* End of file MY_URI.php */
/* Location: .application/libraries/MY_URI.php */

Это не совсем ответ на вопрос

Hugo Dozois 16.12.2012 08:34

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

<?php
$url = parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'], $params);
?>

Массив $params содержит параметры, переданные после символа? символ

Вы можете включить строки запроса, если действительно настаиваете. В вашем config.php вы можете включить строки запроса:

$config['enable_query_strings'] = TRUE;

Для получения дополнительной информации вы можете посмотреть внизу этой страницы Wiki: http://codeigniter.com/user_guide/general/urls.html

Тем не менее, лучше научиться работать с чистыми URL-адресами.

Теперь он работает нормально с CodeIgniter 2.1.0

    //By default CodeIgniter enables access to the $_GET array.  If for some
    //reason you would like to disable it, set 'allow_get_array' to FALSE.

$config['allow_get_array']      = TRUE; 

Вам просто нужно включить его в config.php, и вы можете использовать $this->input->get('param_name'); для получения параметров.

Эта функция идентична функции post, только она извлекает данные:

$this->input->get()

https://www.codeigniter.com/user_guide/libraries/input.html

Вы можете попробовать это

$this->uri->segment('');

Если вам нужен первый параметр, используйте его.

$this->uri->segment('3');

И вам нужен второй параметр, используйте его

$this->uri->segment('4');

У вашего множества параметров улучшите параметр

мой параметр? uid = 4 и получить его с помощью:

$this->uid = $this->input->get('uid', TRUE);
  echo $this->uid;

мудрый

для чего нужен этот ИСТИННЫЙ флаг?

gumuruh 26.06.2020 12:21

Сделайте это ниже. Работал у меня. Я взял значения из поля выбора и другого текстового поля. Затем, нажав кнопку, я взял все данные в функцию Javascript и перенаправил с помощью javascript.

//Search Form
$(document).ready (function($){
    $("#searchbtn").click(function showAlert(e){
        e.preventDefault();
        var cat = $('#category').val();
        var srch = $('#srch').val();

        if (srch= = ""){
            alert("Search is empty :(");
        }
        else{
            var url = baseurl+'categories/search/'+cat+'/'+srch;            
            window.location.href=url;
        }
    });
});

Приведенный выше код работал у меня.

Другие вопросы по теме