概要
SecurityComponentのCSRF対策の機能を使って、Formからの二重送信を防止することができます。
1.xのときに使ってみたことがありましたが、SecurityComponentは思ったように動いてくれなかったイメージがありました。
2.0でとりあえずもう一度使ってみようと思い、動かしてみたらいい感じでした。
環境
- CakePHP2.0
- Windows
- XAMPP
SecurityComponentのCSRF対策の機能を使って、Formからの二重送信を防止することができます。
1.xのときに使ってみたことがありましたが、SecurityComponentは思ったように動いてくれなかったイメージがありました。
2.0でとりあえずもう一度使ってみようと思い、動かしてみたらいい感じでした。
二重送信を防止するために、jQueryのプラグインdisableOnSubmitを使うと便利だけれど、使うとname属性を取得できなくなる。
以下のようにsubmitのボタンで処理を振り分けたいときには、振り分けができなくなるので注意が必要。
<?=$this->Html->script('disableOnSubmit')?> <script> $(function(){ $('form').disableOnSubmit(); }); </script> ...... $this->Form->submit('削除', array('name' => 'delete')); ...... $this->Form->submit('修正', array('name' => 'edit')); ......
二重送信防止は修正のときだけでいいよって場合は、次のようにする。
ただしこのときも、修正のsubmitのname属性は取得できない。
<?=$this->Html->script('disableOnSubmit')?> <script> $(function(){ $('form').disableOnSubmit('.submit'); }); </script> ...... $this->Form->submit('削除', array('name' => 'delete', 'div' => false)); ...... $this->Form->submit('修正', array('name' => 'edit')); ......
ってことで、処理を振り分けたい場合は別の方法を考えないといけない。