ここで修正できない小さな問題があります。この投稿は完了しますが、応答で「500 内部サーバー エラー」が返されます。</p>
誰がそれを修正しますか?
CI フォーラムで検索した後、このリンクcodeigniter-csrf-protection-with-ajax を見つけましたが、それで解決できません。
ここで修正できない小さな問題があります。この投稿は完了しますが、応答で「500 内部サーバー エラー」が返されます。</p>
誰がそれを修正しますか?
CI フォーラムで検索した後、このリンクcodeigniter-csrf-protection-with-ajax を見つけましたが、それで解決できません。
アクションを機能させるには、AJAX POST 要求に csrf キーを含める必要があります。
ただし、データを取得しているだけなので、method:'get'
代わりにを使用するmethod:'post'
と、トリックが実行され、リクエストが機能するはずです。
POST をいつ使用し、いつ GET を使用するかについての素晴らしい議論については、この質問を参照してください。
実際、サーバーにデータを POST することを計画していて、CSRF キーの欠如について不平を言う場合は、それをリクエストに追加する 2 つの方法があります。
プラグインを使用して、プロトタイプが codeigniter によって設定されている csrf Cookie からデータを抽出できるようにします。これはよりエレガントかもしれませんが、スクリプト全体にもう少し追加されます。プロトタイプhttp://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/で Cookie にアクセスする方法の詳細が記載された投稿を次に示します。
このリクエストを既存のフォームから送信する場合は、キーを含む非表示の入力フィールドが必要であり、次のような方法で簡単にアクセスできますvar csrf = $("input[name=csrf_key]").val();
(これは jQuery 構文ですが、プロトタイプ バージョンは「遠すぎます)。そのページにフォームがない場合はecho form_open(); form_close();
、隠しフィールドが CI によって確実に出力されるようにどこかに書き込んでください。
最後に、その値を POST リクエストと一緒に送信して、サーバーをハックしたくないクールな男であることを確認してください。このパラメーターを JS の ajax リクエストに追加する必要があります。
parameters: {'csrf_key' : csrf}
csrf は、(Cookie または非表示の入力から) キーを取得した変数です。名前が大丈夫であることを確認してください!Cookie を取得する場合は、Cookie 名が で設定したものと一致していることを確認してconfig/config.php
ください。入力トークンについても同様です。
お役に立てれば!