2008-12-02 2 views
46

Я знаю, что кодIgniter отключает параметры GET по умолчанию.Параметры GET в URL с CodeIgniter

Но если у вас все сделано в ПОСТ, разве вас не раздражают запросы на отправку данных, если вы когда-либо возвращаете назад после отправки формы?

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

Неужели это такая большая проблема с безопасностью, чтобы позволить параметры GET?

+0

Начиная с CodeIgniter 2.x, GET para метры теперь * включены * по умолчанию. – 2013-04-07 15:29:40

ответ

56

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

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

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

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

+1

yes - с помощью CodeIgniter обрабатывает URL по умолчанию, дополнительные сегменты в URI действуют как параметры для ваших методов контроллера. – 2008-12-08 11:40:25

0

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

+0

Но если вам нужно GET, вам нужно ПОЛУЧИТЬ, как насчет ссылок на закладки, каналов и т. П.? – Lorenzo 2009-04-06 13:30:24

+0

Все это прекрасно, но вы должны понимать, что браузер может кэшировать те запросы GET, если соответствующие заголовки не добавлены. – 2009-04-07 00:24:06

+7

IMO, отсутствие GET является одним из самых больших недостатков CI. GET является основным аспектом HTTP и должен использоваться соответствующим образом. Кэширование - это * хорошая вещь! – pbreitenbach 2009-07-04 00:11:04

1

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

0

Еще проще:

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

, что плагин очень здорово, хотя.

2

«вы не раздражаться по повторной отправки запросов данных, если когда-либо вы нажимаете назад после отправки формы»

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

1

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

6

parse_str($_SERVER['QUERY_STRING'],$_GET); работал только для меня после того, как я добавил следующую строку в приложение/Config/config.php:

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

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

(от http://www.maheshchari.com/work-to-get-method-on-codeigniter/)

1

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 */ 
13

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

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

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

4

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

$config['enable_query_strings'] = TRUE; 

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

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

11

Сейчас он работает нормально с 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; 
8

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

0

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

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

Если ваша ваша потребность первого использования параметра Это.

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

И ваша потребность второй параметр использовать его

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

Попросите многих параметров повышения параметру

1

мой параметр UID = 4 и получить его:

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

wis

Смежные вопросы