49

codeIgniter はデフォルトで GET パラメータをオフにしていることを知っています。

しかし、すべて POST で処理されているため、フォームの送信後に押し返すと、データの再送信要求に悩まされることはありませんか?

それは私を悩ませますが、純粋にこの理由で GET を許可するかどうかはわかりません。

GET パラメータも許可することは、それほど大きなセキュリティ上の問題ですか?

4

17 に答える 17

59

私が初めて CodeIgniter を使い始めたとき、GET を使用しなかったことも私を失望させました。しかしその後、組み込みのURI Classを使用して URI を操作することで、GET パラメーターをシミュレートできることに気付きました。これは素晴らしく、URL の見栄えを良くします。

または、GET が本当に必要な場合は、これをコントローラーに入れることができます。

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

これにより、変数が GET 配列に戻されます。

于 2008-12-02T17:36:36.223 に答える
12

これは私のために働いた:

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

$params配列には、? の後に渡されるパラメーターが含まれます。キャラクター

于 2010-10-20T13:25:32.207 に答える
10

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; 
于 2012-08-01T18:49:52.073 に答える
8

config.php で有効にするだけで、$this->input->get('param_name');パラメータを取得できます。

于 2012-11-09T07:00:50.900 に答える
7

最初のパラメータが必要な場合は、それを使用してください。

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

そして、2番目のパラメーターが必要で、それを使用します

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

あなたの多くのパラメータがパラメータを強化してください

于 2015-06-01T09:53:28.220 に答える
6

parse_str($_SERVER['QUERY_STRING'],$_GET); 次の行を applications/config/config.php に追加した後にのみ機能しました。

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

CI では $_GET パラメーターは実際には必要ないことがわかりましたが、Facebook や他のサイトは GET パラメーターをリンクの最後にダンプし、私の CI サイトでは 404 になります!! 上記の行を config.php に追加すると、それらのページが機能しました。これが人々に役立つことを願っています!

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

于 2010-06-24T18:33:26.113 に答える
3

本当に主張する場合は、クエリ文字列を有効にすることができます。config.phpで、クエリ文字列を有効にできます。

$config['enable_query_strings'] = TRUE;

詳細については、このWikiページの下部を参照してください:http: //codeigniter.com/user_guide/general/urls.html

それでも、クリーンURLでの作業を学ぶことはより良い提案です。

于 2011-11-27T21:43:11.713 に答える
2

「フォームの送信後にプッシュバックした場合でも、データの再送信要求に悩まされることはありません」

これを回避するには、フォームの送信を処理するページから成功ページにリダイレクトします。最後の「アクション」は、フォームの送信ではなく、成功ページの読み込みでした。つまり、ユーザーがF5を実行すると、そのページが再読み込みされ、フォームが再度送信されることはありません。

于 2009-08-13T09:12:20.387 に答える
1

allesklar: スクリプトとボットは、通常のリクエストを送信するのとほぼ同じくらい簡単にデータを POST できるため、これは少し誤解を招く可能性があります。これは秘密ではなく、HTTP の一部です。

于 2009-02-18T16:55:10.020 に答える
1

少し話題から外れましたが、コントローラー間でいくつかの変数を渡し、Flashdata に遭遇するためだけに、CodeIgniter で get 関数を探していました。
参照: http://codeigniter.com/user_guide/libraries/sessions.html
Flashdata を使用すると、次のサーバー リクエストでのみ利用可能で、その後自動的にクリアされるクイック セッション データを作成できます。

于 2010-01-03T03:00:28.293 に答える
1

私のパラメータは ?uid=4 で、次のように取得します:

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

知恵

于 2016-05-23T19:03:37.420 に答える
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 */
于 2010-07-31T18:02:33.603 に答える
0

GET パラメータは Web ブラウザによってキャッシュされますが、POST はキャッシュされません。したがって、POST を使用すると、キャッシュについて心配する必要がないため、通常は POST が好まれます。

于 2008-12-02T17:08:13.613 に答える
0

あなたはこれを試すことができます

$this->uri->segment('');
于 2014-09-30T15:47:30.823 に答える
0

さらに簡単:

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

そのプラグインはかなりクールですが。

于 2009-08-09T03:46:04.377 に答える
0

以下でこれを行います。私のために働いた。選択ボックスと別のテキストボックスから値を取得しました。次に、ボタンをクリックすると、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;
        }
    });
});

上記のコードは私にとってはうまくいきました。

于 2019-06-17T07:19:03.033 に答える